从第n个位置开始每个第n项

时间:2017-04-04 13:23:18

标签: c# linq

我正在使用LINQ使用下面的代码获取列表的第n个值

var addMixingEvent
    = productionEvent.OrderBy(x => x.StartTime)
                     .Where((x, i) => i % mixesRequired == 0)
                     .ToList();

这在一定程度上有效,但我还需要将第一个带回来并添加到我的列表中的项目作为第n个项目。

我已将0更改为mixesRequired,在此实例中,此值为4.

所以本质上我需要每第4个项目,第一个项目是第4个项目。

任何和所有帮助表示赞赏。

由于

西蒙

2 个答案:

答案 0 :(得分:1)

在ToList()语句之前使用Skip()方法跳过第一个结果。

您的代码应如下所示:

var addMixingEvent
= productionEvent.OrderBy(x => x.StartTime)
                 .Where((x, i) => i % mixesRequired == 0)
                 .Skip(1)
                 .ToList();

Enumerable.Skip

答案 1 :(得分:1)

如果理解正确,你想获得每个第n项,跳过位置0的项目。

如果您订购的商品序列如下:

var orderedItems = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 }

并且您希望每第4个项目跳过位置0的项目,您想要的输出如下:

var filteredItems = { 4, 8, 12 }

如果可以,您可以通过多种方式实现过滤后的输出。 e.g:

var filteredItems = orderedItems.Skip(mixesRequired).Where((x,i) => i % mixesRequired == 0);

var filteredItems = orderedItems.Where((x,i) => i > 0 && i % mixesRequired == 0);

var filteredItems = orderedItems.Where((x,i) => i % mixesRequired == 0).Skip(1);

不要相信任何这些替代方案比其他方案更明显。在任何情况下,快速分析都可以消除您的疑虑。

希望有所帮助。