2013-12-13 65 views
0

我試圖做一個跟蹤算法,爲此我需要不斷地獲取列表中所有元素的位置,我想知道是否有一種方法可以在沒有「ForEach」 ,我知道你可以將整個列表複製到另一個列表中,這就是我現在正在做的事情。可以從列表中的所有元素中選擇一個屬性?

我有這個:

List copy = List original;

但我想這樣做

名單副本=列出original.Position

注:位置是我的名單裏面vector2變種。

回答

1

我會建議使用LINQ:

List<Position> copy = original.Select(e => e.Position).ToList(); 

'E' 我隨機抽取,E代表元素。它代表列表中的每個元素。這相當於:

List<Position> copy = new List<Position>(); 
foreach(Element e in original) 
{ 
    copy.Add(e.Position); 
} 

這將返回一個List<Position>。請注意,此列表的格式與原始格式不同。

另請注意,Linq查詢儘管乾淨,簡潔且易於閱讀,但並不像手動循環那樣高效。然而,對於一個小小的列表,幾百或更少,你不會看到任何區別。

這裏是一個非常深入的關於這一主題的SO問題的鏈接:foreach + break vs linq FirstOrDefault performance difference

,這裏是使用LINQ查詢的鏈接:http://msdn.microsoft.com/en-us/library/bb397906.aspx

在這個例子中的最後一個環節(到MSDN)你會看到兩種形式的linq符號。一個是我用過的標準符號。另一種是查詢表單,與使用標準符號調用Where()類似。我發現查詢符號類似於編寫SQL查詢。

最後一點需要注意的是,您還可以使用ToArray()而不是ToList()來生成數組。如果副本的大小是固定的,並且您要隨機訪問它們,則最好。無論使用哪種方式,您都可以依賴副本的順序與原始副本相同,這就是您應該如何將其與原始副本相關聯的方式,因此copy中的第4個位置是例如original中第4個元素的位置。

我希望這有助於。

+0

謝謝......因爲我一直在尋找效率,我想我必須堅持手動循環。 – user3097604

+0

很高興我能幫到你。 – tjheslin1

相關問題