2011-08-14 30 views
2

我有一個List<Player>我想輸出命令到一個字符串,所以我想知道什麼是這樣做的正確方法,如果一個簡單的foreach將始終輸出它已經排序(迄今它從我做的測試)?清單列表或哪個是正確的方法?

例如:

int position = 0; 
foreach (var player in list) 
{ 
    position++; 
    Console.Write(position.ToString() + " " + player.Name); 
} 

在那裏我可以以後可能得到它像list[X]其中X是在列表中的玩家人數。

或者是否有更好的方法來做到這一點?

+0

你的方法應該可以正常工作。 – lowerkey

回答

3

列表將按照它們添加到列表的順序輸出元素。如果使用.net 3.0+,則可以在打印輸出之前執行.OrderBy(r=> r.Foo)以保證訂單。如果你去你的循環過程中遞增一個計數器,如果訂購我會建議使用for循環的經典,而不是一個foreach

for(int pos =0; pos<list.count; ++pos) { 
    Console.Write(pos.ToString() + " " + list[pos].Name); 
} 
+0

列表索引器保證是恆定時間嗎? –

+0

這個列表在我需要輸出的時候不會被改變,所以我想是的,它會是不變的,謝謝你的答覆,我完全忘記了這個;)這確實使我更有意義,然後我做了什麼。 – Prix

+0

@Prix該列表可以是常量,但這並不意味着索引器是恆定時間。例如,如果列表是通過遍歷每個元素來實現的,那麼訪問'list [1000]'將需要1000個步驟(這不是恆定的時間)。對於標準數組,「list [1000]」位於已知位置,所以操作是恆定時間。如果需要很多操作來訪問列表中的後續元素,那麼for循環比foreach慢得多 –

1

對於列表,使用foreach將始終以列表的原始順序輸出。

+0

謝謝;)是有點懷疑,但不再是;) – Prix

1

你有什麼作品。列表是一個有序的集合,它的枚舉器也是有序的。這是一個很好的問題,因爲並非所有集合都有排序的概念,例如字典

+0

醬菜,這是真的,但字典主要依賴於它的關鍵,我不確定列表有某種排序:)我正在尋找getenumerator函數,但仍然有點懷疑。 – Prix

0

您在訂單意味着它是你的foreach是集合我究竟該怎麼做。但是,如果您需要更改順序,那麼您可能會考慮使用LINQ,尤其是如果您想要按照plyer類的不同屬性進行排序。

相關問題