LINQ - 从列表中特定索引开始获取项目

4
使用LINQ,我需要根据条件从列表中提取项目。为此,它应该只考虑从 (提供的索引 - 3) 到提供的索引 (动态) 的项目。
例如,列表包含项 {1,3,5,7,9,11,13}。如果提供的索引是 4,则应该从索引 2 开始总共考虑三个索引,直到结束于索引 4。在这三个项目中,它应该根据条件进行过滤 - 比如说,项目应该大于 5。
结果应该是 - {7,9}
我尝试的方法是错误的,我卡住了。
list.Select(item => list.Select(index => item[index - 3] && item > 5).ToList());
2个回答

19

听起来你想要一个结合了SkipTake,并用Where进行筛选的混合结果:

var query = list.Skip(index - 3)    // Start at appropriate index
                .Take(3)            // Only consider the next three values
                .Where(x => x > 5); // Filter appropriately

就我个人而言,索引是结束点而不是起始点,这对我来说有些奇怪。你可能会想看看是否有其他代码片段可以从更改中受益。


4
< p > 另一种替代 SkipTake 的方法是将项目索引包含在 Where 子句中。

list.Where((x, i) => // x is the list item, i is its index
    i > (index - 3) && i <= index && // index bounds
    x > 5 // item condition
)

针对您的特定要求,如果只需要处理单个子项范围,我会选择使用SkipTake。但是如果您需要在项目索引上应用更复杂的条件,则可以利用此Where重载。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接