實際上,在C#2.0中,您可以創建自己的迭代器,以反向遍歷容器。然後,您可以在您的foreach語句中使用該迭代器。但是你的迭代器必須首先有一個導航容器的方法。如果它是一個簡單的數組,它可以走回頭路的是這樣的:
static IEnumerable<T> CreateReverseIterator<T>(IList<T> list)
{
int count = list.Count;
for (int i = count - 1; i >= 0; --i)
{
yield return list[i];
}
}
不過,當然你不能做到這一點與一個字典,因爲它沒有實現IList或提供了一個索引。說一本字典沒有秩序是不正確的:當然它有秩序。如果你知道它是什麼,那麼這個命令甚至可以是有用的。
對於你的問題的解決方案:我會說複製元素到一個數組,並使用上述方法來反向遍歷它。就像這樣:
static void Main(string[] args)
{
Dictionary<int, string> dict = new Dictionary<int, string>();
dict[1] = "value1";
dict[2] = "value2";
dict[3] = "value3";
foreach (KeyValuePair<int, string> item in dict)
{
Console.WriteLine("Key : {0}, Value: {1}", new object[] { item.Key, item.Value });
}
string[] values = new string[dict.Values.Count];
dict.Values.CopyTo(values, 0);
foreach (string value in CreateReverseIterator(values))
{
Console.WriteLine("Value: {0}", value);
}
}
複製你的價值到一個數組可能看起來是一個壞主意,但取決於值的類型是不是真的那麼壞。你可能只是複製引用!
哦,是的。咄。我完全愚蠢。感謝:-) – Pandincus 2008-09-17 13:04:10
如果您想要散列表類型查找以及陣列列表樣式序列排序,請使用SortedList。有人已經發布了一段代碼片段。 – Gishu 2008-09-17 13:41:33
當然哈希表已經訂購! – 2011-11-04 12:28:49