我有一个自定义对象列表,例如:
public class MyObject
{
public int MyField { get; set; }
}
该列表有12个对象,其中MyField属性最初为0,因此对象将为:
0,0,0,0,0,0,0,0,0,0,0,0
我想重复每n次跳过x项。因此,如果我重复2并跳过3,则新值应为:
1,0,0,1,0,0,0,0,0,0,0,0
如果我想重复3次并跳过4,则新值将为:
1,0,0,0,1,0,0,0,1,0,0,0
是否可以使用Linq
?
答案 0 :(得分:4)
Linq用于查询,而非更新。您可以编写具有副作用的linq方法,但由于惰性枚举和其他因素,首选for
或foreach
循环:
int repeat = 2;
int skip = 3;
for(int i = 0; i < list.Count && repeat > 0; i += skip)
{
list[i].MyField = 1;
repeat--;
}
答案 1 :(得分:2)
您可以使用Where()
子句组合两种方法,通过以下方式定位每个第n个元素:
// This would target every nth element of your collection (i being the index)
collection.Where((x,i) => i % n == 0);
随着Skip()
调用以跳过特定数量的元素:
// This would skip n elements, returning those that remained after the nth index
collection.Skip(n);
使用循环并遍历各个元素,通过模运算符%
检查条件(查看它是否为第n个元素)然后使用Skip()
可能更简单必要时。