我有一个项目列表,我需要遍历它,以便首先收集每个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();
}
有没有更好的方法来完成上述工作?
答案 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!
});