迭代c#数组&将对象按顺序放入其他数组中

本文关键字:数组 其他 顺序 对象 迭代 | 更新日期: 2023-09-27 18:18:37

好吧,这看起来很简单,但我想不出一个直接的解决方案;基本上,我有一个c#中的对象数组,它包含102个元素。然后我还有另外4个空数组。我想遍历原始数组并平均分配100个元素,然后将101和102分别分配给第一个和第二个新数组。

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++;
}

现在上面的代码肯定工作,但我很好奇,有人知道一个更好的方法来做到这一点吗?

迭代c#数组&将对象按顺序放入其他数组中

var workArrays = new[] { 
    threadOneWork,
    threadTwoWork,
    threadThreeWork,
    threadFourWork, 
};
for(int i=0; i<routingData.Length; i++) {
    workArrays[i%4][i/4] = routingData[i];
}

将这四个数组放入数组的数组中,并使用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++;
}

Linq是你的朋友!在您的例子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
*/