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