0

我有这个数组:

 Point[] arr  = samples.pointsArray;

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

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

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

先感谢您!

4

6 回答 6

2

编辑

使用它的版本Select同时获取索引和对象,并创建一个匿名对象,其中包含对象和索引。它看起来像这样:

someEnumerable.Select((obj, idx) => new {Item = obj, Index = idx})

您需要在使用之前Where执行此操作,以便在过滤操作后原始索引保持不变。

在以下操作中,您可以像这样使用该项目:

x => x.Item

和这样的索引:

x => x.Index
于 2012-11-28T12:47:04.107 回答
1
var maxXCol = arr.Select((p, inx) => new { p,inx})
                 .Where(y => maxX.X == y.p.X)
                 .Select(z => z.inx);
于 2012-11-28T12:53:32.363 回答
1

您可以使用Select带有索引的重载,并将该索引与原始行一起投影。然后只取结果集合的索引。

var maxXCol = arr
    .Select((p, index) => new { Item = p, Index = index })
    .Where(p => maxX.X == p.Item.X)
    .Select(x => x.Index);
于 2012-11-28T12:47:15.807 回答
1

您可以先使用匿名类型的索引选择值,然后根据您的条件过滤它,然后选择索引。

var result = arr.Select((g, index) => new { g, index })
              .Where(r => maxX.X == r.X)
              .Select(t => t.index);
于 2012-11-28T12:53:56.560 回答
1

尝试这个:

arr.Select((e,i)=>new{index=i, value=e}).Where(ei=>ei.value.X==maxX.X).Select(ei=>ei.index);
于 2012-11-28T12:55:19.163 回答
1
var maxXCol = arr
    .Select((a, b) => new { b, a })
    .Where(p => maxX.X == p.a.X)
    .Select(i=>i.b);
于 2012-11-28T12:59:20.780 回答