我有这个数组:
Point[] arr = samples.pointsArray;
我使用此行检索满足条件的所有元素:
var maxXCol = arr.Where( p => maxX.X == p.X );
知道如何修改上面的行,只获取这些元素的索引吗?
提前谢谢!
答案 0 :(得分:2)
修改强>
使用同时获取索引和对象的Select
版本,并使用其中的对象和索引创建一个匿名对象。它看起来像这样:
someEnumerable.Select((obj, idx) => new {Item = obj, Index = idx})
在使用Where
之前,您需要执行此操作,以便在过滤操作后原始索引保持不变。
在以下操作中,您可以使用如下项目:
x => x.Item
和索引如此:
x => x.Index
答案 1 :(得分:1)
您可以使用带有索引的Select
重载,并将该索引与原始行一起投影。然后只获取结果集合的索引。
var maxXCol = arr
.Select((p, index) => new { Item = p, Index = index })
.Where(p => maxX.X == p.Item.X)
.Select(x => x.Index);
答案 2 :(得分:1)
var maxXCol = arr.Select((p, inx) => new { p,inx})
.Where(y => maxX.X == y.p.X)
.Select(z => z.inx);
答案 3 :(得分:1)
您可以先使用匿名类型的索引选择值,稍后根据条件对其进行过滤,然后选择索引。
var result = arr.Select((g, index) => new { g, index })
.Where(r => maxX.X == r.X)
.Select(t => t.index);
答案 4 :(得分:1)
试试这个:
arr.Select((e,i)=>new{index=i, value=e}).Where(ei=>ei.value.X==maxX.X).Select(ei=>ei.index);
答案 5 :(得分:1)
var maxXCol = arr
.Select((a, b) => new { b, a })
.Where(p => maxX.X == p.a.X)
.Select(i=>i.b);