我試圖做一個跟蹤算法,爲此我需要不斷地獲取列表中所有元素的位置,我想知道是否有一種方法可以在沒有「ForEach」 ,我知道你可以將整個列表複製到另一個列表中,這就是我現在正在做的事情。可以從列表中的所有元素中選擇一個屬性?
我有這個:
List copy = List original;
但我想這樣做
名單副本=列出original.Position
注:位置是我的名單裏面vector2變種。
我試圖做一個跟蹤算法,爲此我需要不斷地獲取列表中所有元素的位置,我想知道是否有一種方法可以在沒有「ForEach」 ,我知道你可以將整個列表複製到另一個列表中,這就是我現在正在做的事情。可以從列表中的所有元素中選擇一個屬性?
我有這個:
List copy = List original;
但我想這樣做
名單副本=列出original.Position
注:位置是我的名單裏面vector2變種。
我會建議使用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個元素的位置。
我希望這有助於。
謝謝......因爲我一直在尋找效率,我想我必須堅持手動循環。 – user3097604
很高興我能幫到你。 – tjheslin1