私はこの配列を持っています:
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
これを試して:
arr.Select((e,i)=>new{index=i, value=e}).Where(ei=>ei.value.X==maxX.X).Select(ei=>ei.index);
インデックスを取得するオーバーロードを使用Select
して、そのインデックスを元の行と一緒に投影できます。次に、結果コレクションのインデックスのみを取得します。
var maxXCol = arr
.Select((p, index) => new { Item = p, Index = index })
.Where(p => maxX.X == p.Item.X)
.Select(x => x.Index);
var maxXCol = arr.Select((p, inx) => new { p,inx})
.Where(y => maxX.X == y.p.X)
.Select(z => z.inx);
最初に匿名タイプのインデックスで値を選択し、後で条件でフィルタリングしてからインデックスを選択できます。
var result = arr.Select((g, index) => new { g, index })
.Where(r => maxX.X == r.X)
.Select(t => t.index);
var maxXCol = arr
.Select((a, b) => new { b, a })
.Where(p => maxX.X == p.a.X)
.Select(i=>i.b);