Linq重复List <t>中给定范围的每个第n个元素

时间:2016-04-21 13:12:02

标签: c# linq

我有一个自定义对象列表,例如:

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

执行此操作

2 个答案:

答案 0 :(得分:4)

Linq用于查询,而非更新。您可以编写具有副作用的linq方法,但由于惰性枚举和其他因素,首选forforeach循环:

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()可能更简单必要时。