如何每n个项迭代一个循环

时间:2016-05-21 09:49:31

标签: c# loops

我有一个项目列表,我需要遍历它,以便首先收集每个n(例如3个)项目,然后在第n个项目处立即处理。

我正在做以下事情:

List<MyObject> smallList = new List<MyObject>();

for (int i = 0; i < largeList.Count; i++)
{
    smallList.Add(largeList[i]);

    if (i % 3 == 0 || i >= largeList.Count - 3)
    {
        //Do somehting with those n items...
    }

    smallList.Clear();
 }

有没有更好的方法来完成上述工作?

4 个答案:

答案 0 :(得分:7)

您也可以使用LINQ:

执行此操作
var largeList = new List<int>(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
for (int i = 0; i < largeList.Count; i += 3)
{
    var items = largeList.Skip(i).Take(3).ToList();
    // do stuff with your 3 (or less items)
}

答案 1 :(得分:1)

我建议使用嵌套循环。不像LinQ那么漂亮,但肯定更快。

v = 0  # this is global variable

def some_function():
    global v
    v = IntVar()
    v.set(0)


    rb1 = Radiobutton (parent, variable = v, value = 0)
    rb1.pack()
    rb2 = Radiobutton (parent, variable = v, value = 1)
    rb2.pack()

然而与你现在的相似。我认为它没有比你拥有的更多的黄油。

答案 2 :(得分:1)

您可以使用LINQ。

首先,&#34;附加&#34;每个项目的索引:

var indexedItems = largeList.Select((item, index) => new {index, item});

现在按照索引对它们进行分组,同时为每个组成员选择项目的集合(IEnumerable):

var groupedItems = indexedItems.GroupBy(indexedItem => indexedItem.index / 3,
                   indexedItem => indexedItem.item,
                   (key, items) => items);

现在处理每个小组

foreach(var items in groupedItems) {
  // and optionally, .ToList() to have a List<T> instead of IEnumerable<T>
  var itemsList = items.ToList();
}

完全......:

var indexedItems = largeList.Select((item, index) => new {index, item});
var groupedItems = indexedItems.GroupBy(indexedItem => indexedItem.index / 3,
                   indexedItem => indexedItem.item,
                   (key, items) => items);

foreach(var items in groupedItems) {
  // Use the items...
}

答案 3 :(得分:0)

您可以使用此代码:

var MyObjectList = new List<MyObject>();

MyObjectList.Where(a => MyObjectList.IndexOf(a) % 3 == 0).ToList().ForEach(a => 
{
        // do your things!
});