2012-11-28 328 views
0

我有這個數組:如何從數組中檢索特定的索引?

Point[] arr = samples.pointsArray; 

我使用此行來檢索滿足條件的所有元素:

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

任何想法如何上述修改行,得到的只有這些要素的指標?

預先感謝您!

回答

2

編輯

使用的Select的版本,既需要索引和對象,並創建與它裏面的對象和索引的匿名對象。它應該是這樣的:

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

你們需要使用Where這個之前這樣做,原來的指數保持過濾操作後保持完整。

在下面的操作,您可以使用像這樣的項目:該指數

x => x.Index 
+1

注到downvoters:既洪扎的,我的回答是足夠的信息來正確地解決問題,但包含未成年人(容易解決你自己的)錯誤。下一次使用*評論*來表明這一點! – Crisfole

1

您可以使用Select超載這需要一個索引,以及項目:

x => x.Item 

和索引像這樣與原始行一起。然後只取結果集合的索引。

var maxXCol = arr 
    .Select((p, index) => new { Item = p, Index = index }) 
    .Where(p => maxX.X == p.Item.X) 
    .Select(x => x.Index); 
+1

編輯糾正邏輯,你可以收回你的downvotes ... –

+0

嗯,至少我可以解決你不幸的損失點... GL下次...這會教我們發佈一個有用的答案,輕微的錯誤! ;) – Crisfole

+1

謝謝,對你也一樣。是的,我們應該在下次發佈前更好的校對:) –

1
var maxXCol = arr.Select((p, inx) => new { p,inx}) 
       .Where(y => maxX.X == y.p.X) 
       .Select(z => z.inx); 
1

您可以用匿名類型指數第一選擇值,以後你跟你的條件篩選,然後選擇索引。

var result = arr.Select((g, index) => new { g, index }) 
       .Where(r => maxX.X == r.X) 
       .Select(t => t.index); 
1

試試這個:

arr.Select((e,i)=>new{index=i, value=e}).Where(ei=>ei.value.X==maxX.X).Select(ei=>ei.index); 
1
var maxXCol = arr 
    .Select((a, b) => new { b, a }) 
    .Where(p => maxX.X == p.a.X) 
    .Select(i=>i.b); 
相關問題