好的,所以这看起来很简单,但我无法想到一个直截了当的解决方案; 基本上我在C#中有一个包含102个元素的对象数组。然后我还有另外4个空数组。我想迭代原始数组并均匀分布100个元素,然后分别将101和102分配给第1个和第2个新数组。
int i = 1,a=0, b=0, c=0, d = 0;
foreach (ReviewStatus data in routingData)
{
if (i == 1)
{
threadOneWork[a] = data;
a++;
}
if (i == 2)
{
threadTwoWork[b] = data;
b++;
}
if (i == 3)
{
threadThreeWork[c] = data;
c++;
}
if (i == 4)
{
threadFourWork[d] = data;
d++;
i = 0;
}
i++;
}
现在上面的代码肯定有效,但我很好奇,有没有人知道更好的方法呢?
答案 0 :(得分:5)
var workArrays = new[] {
threadOneWork,
threadTwoWork,
threadThreeWork,
threadFourWork,
};
for(int i=0; i<routingData.Length; i++) {
workArrays[i%4][i/4] = routingData[i];
}
答案 1 :(得分:2)
将四个数组放入数组数组中,并使用i%4
作为索引。假设thread###Work
数组有足够的空间来存储数据,您可以这样做:
var tw = new[] {threadOneWork, threadTwoWork, threadThreeWork, threadFourWork};
var i = 0;
foreach (ReviewStatus data in routingData) {
tw[i%4][i/tw.Length] = data;
i++;
}
答案 2 :(得分:0)
Linq是你的朋友!使用modulo通过案例4中的数组总数对项目进行分组。
例如,代码将它们分成四个不同的列表:
var Items = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
Items.Select( ( i, index ) => new {
category = index % 4,
value = i
} )
.GroupBy( itm => itm.category, itm => itm.value )
.ToList()
.ForEach( gr => Console.WriteLine("Group {0} : {1}", gr.Key, string.Join(",", gr)));
/* output
Group 0 : 1,5,9
Group 1 : 2,6,10
Group 2 : 3,7
Group 3 : 4,8
*/