如何对特定索引使用 LINQ.Where

How to use LINQ.Where for specific indexes

正如标题所说,我需要一个 LINQ 表达式,它将只检查数组的几个索引。我现在是这样的:

int[] a = b.Where(c => c % 4 == (int)Cards.CardSuits.Club).ToArray();

这些不是我的实际变量名称,我只是将其缩短了一点。 我只需要检查 b[2]b[b.length-1]

如果您想在谓词中使用索引而不是值,请使用 Where 的重载,它接受检查 value/index 对的谓词:

int[] a = b.Where((value, index) => index % 4 == (int) Cards.CardSuits.Club)
           .ToArray();

(我强烈建议您以不同的方式为卡片建模 - 考虑结构或具有 SuitRank 属性的 class。然后您可以检查花色是否以 更自然的方式加入俱乐部...)


如果您实际上想要保留现有过滤器,但只是忽略源的前两个元素,您可能需要 Skip:

int[] a = b.Skip(2)
           .Where(c => c % 4 == (int) Cards.CardSuits.Club)
           .ToArray();

你说你只需要检查 b[1] 到 b[b.length-1],所以你只是跳过了第一个 ("[0]") 元素,对吧?为此,请这样做:

b.Skip(1).Where(...)