如何从数组中检索特定索引?

时间:2012-11-28 12:45:55

标签: c# .net linq

我有这个数组:

 Point[] arr  = samples.pointsArray;

我使用此行检索满足条件的所有元素:

var maxXCol = arr.Where( p => maxX.X == p.X );

知道如何修改上面的行,只获取这些元素的索引吗?

提前谢谢!

6 个答案:

答案 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);