你要优雅简洁,我给你优雅简洁:
var fifties = from index in Enumerable.Range(0, addresses.Length)
group addresses[index] by index/50;
foreach(var fifty in fifties)
Send(string.Join(";", fifty.ToArray());
当你不需要的时候,为什么要搞乱那些糟糕的循环代码呢?您想按 50 组分组,然后按 50 组分组。
这就是组运算符的用途!
更新:评论者 MoreCoffee 询问这是如何工作的。假设我们想三人一组,因为这样更容易输入。
var threes = from index in Enumerable.Range(0, addresses.Length)
group addresses[index] by index/3;
假设有九个地址,索引从零到八
这个查询是什么意思?
Enumerable.Range 是从零开始的九个数字的范围,所以0, 1, 2, 3, 4, 5, 6, 7, 8。
范围变量index 依次采用这些值。
然后我们检查每个对应的addresses[index] 并将其分配给一个组。
我们将它分配到哪个组?到群组index/3。在 C# 中整数算术向零舍入,因此索引 0、1 和 2 除以 3 时变为 0。索引 3、4、5 除以 3 时变为 1。索引 6、7、8 变为 2。
因此我们将addresses[0]、addresses[1] 和addresses[2] 分配给第0 组,addresses[3]、addresses[4] 和addresses[5] 分配给第1 组,依此类推。
查询的结果是三组的序列,每组是三项的序列。
这有意义吗?
还请记住,查询表达式的结果是一个代表此操作的查询。在foreach 循环执行之前,它不会执行操作。