我想从满足条件的数组中返回所有索引。我想出了
myarray
.Select((p,i) =>
{
if (SomeCondition(p)) return i;
else return -1;
})
.Where(p => p != -1);
我知道我可以编写一个扩展方法或者用循环来编写它,但我想知道LINQ中是否内置了一些我不熟悉的东西。如果这是微不足道的道歉
答案 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
块,因此不那么冗长。