Thực ra, trong C# 2.0, bạn có thể tạo trình vòng lặp của riêng bạn để truyền tải một vùng chứa ngược lại. Sau đó, bạn có thể sử dụng trình lặp đó trong báo cáo foreach của bạn. Nhưng trình lặp của bạn sẽ phải có cách điều hướng vùng chứa ở vị trí đầu tiên. Nếu đó là một mảng đơn giản, nó có thể quay ngược lại như sau:
static IEnumerable<T> CreateReverseIterator<T>(IList<T> list)
{
int count = list.Count;
for (int i = count - 1; i >= 0; --i)
{
yield return list[i];
}
}
Nhưng tất nhiên bạn không thể làm điều đó bằng từ điển vì nó không thực hiện IList hoặc cung cấp trình chỉ mục. Nói rằng một từ điển không có thứ tự là không đúng: tất nhiên nó có trật tự. Thứ tự đó thậm chí có thể hữu ích nếu bạn biết nó là gì.
Để biết giải pháp cho vấn đề của bạn: Tôi muốn nói sao chép các phần tử vào một mảng và sử dụng phương pháp trên để truyền tải nó ngược lại. Như thế này:
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);
}
}
Sao chép giá trị vào một mảng có thể có vẻ không tốt, nhưng tùy thuộc vào loại giá trị không thực sự tệ. Bạn có thể chỉ cần sao chép tài liệu tham khảo!
Nguồn
2008-09-17 13:24:09
Oh yeah. Duh. Tôi hoàn toàn ngu ngốc. Cảm ơn :-) – Pandincus
Sử dụng SortedList nếu bạn muốn tra cứu kiểu hashtable cũng như sắp xếp thứ tự dãy kiểu danh sách. Ai đó đã đăng một đoạn mã. – Gishu
Tất nhiên một hashtable đã đặt hàng! –