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

これを試して:

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

インデックスを取得するオーバーロードを使用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 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

最初に匿名タイプのインデックスで値を選択し、後で条件でフィルタリングしてからインデックスを選択できます。

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
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 に答える