使用LINQ清除匹配条件的数组索引的方法

时间:2011-05-14 14:27:21

标签: c# linq

我想从满足条件的数组中返回所有索引。我想出了

myarray
   .Select((p,i) => 
       {              
          if (SomeCondition(p)) return i; 
          else return -1;
       })
   .Where(p => p != -1);

我知道我可以编写一个扩展方法或者用循环来编写它,但我想知道LINQ中是否内置了一些我不熟悉的东西。如果这是微不足道的道歉

3 个答案:

答案 0 :(得分:8)

就个人而言,我会这样做:

myarray
    .Select((p, i) => new { Item = p, Index = i })
    .Where(p => SomeCondition(p.Item))
    .Select(p => p.Index);

答案 1 :(得分:5)

当我阅读问题的文本而不是样本时:

int[] data = { 1, 2, 5, 6, };

var results = Enumerable.Range(0, data.Length).Where(i => data[i] > 2);

// results = { 2, 3 } 

你真的需要那些-1吗?

答案 2 :(得分:0)

我可能会写一个扩展方法,但如果我选择不这样做,我会这样做:

array
  .Select((item, index) => SomeCondition(item) ? index : -1)
  .Where(index => index != -1);

这正是你已经在做的事情,但是由于它使用了三元if运算符而不是if / else块,因此不那么冗长。