2012-04-16 23 views
9

tôi có một từ điển và bổ sung một số yếu tố trên ví dụ it.for,làm thế nào để lặp lại một từ điển <string, string> theo thứ tự ngược lại (từ cuối đến đầu tiên) trong C#?

Dictionary<string, string> d = new Dictionary<string, string>(); 

d.Add("Content","Level0"); 
d.Add("gdlh","Level1"); 
d.Add("shows","Level2"); 
d.Add("ytye","Level0"); 

Trong C#, từ điển giữ các yếu tố trong tự nhiên order.But bây giờ tôi muốn lặp những giá trị từ trước đến đầu tiên (ví dụ, Reverse trật tự) .i có nghĩa là,

đầu tiên tôi muốn đọc ytye rồi hiển thị, gdlh và cuối cùng là Nội dung.

hãy hướng dẫn cho tôi thoát ra khỏi vấn đề này ...

+3

Bạn bang * "Trong C#, từ điển giữ các yếu tố trong trật tự tự nhiên" *. Đó là không đúng. [Phần nhận xét] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx) tuyên bố * "Thứ tự các mục được trả về là không xác định." * –

+1

@Daniel Hilgarth Đó là lần đầu tiên của tôi suy nghĩ, và tôi nhận xét như vậy, nhưng loại bỏ nó bởi vì tôi đã thử nghiệm một số mã và nó hoạt động. Vì vậy, tôi đã nghiên cứu thêm một chút. Cuối cùng nó có thể cho các yếu tố để sắp xếp lại trong quá trình chèn nếu nó buộc từ điển để thay đổi kích cỡ. SortedDictionary là đề cập đến thứ tự của các phím, nhưng bạn có thể cho nó một so sánh ... OrderedDictionary là không chung chung, nhưng có thể là những gì anh ta cần. –

+0

Tôi đã tham gia vào một cuộc tranh cãi lớn về điều này - trong khi "thứ tự" của các mục được liệt kê trong một từ điển chuẩn * là * về cơ bản thứ tự bạn đặt vào, đây KHÔNG PHẢI LÀ LÃNH ĐẠO! Nó là vô cùng khôn ngoan để giả định điều này sẽ luôn luôn là trường hợp. – JerKimball

Trả lời

14

Chỉ cần sử dụng các phương pháp khuyến nông LINQ Reverse

ví dụ

foreach(var item in d.Reverse()) 
{ 
    ... 
} 
7

Sử dụng LINQ Reverse, nhưng lưu ý rằng không ngược tại chỗ:

var reversed = d.Reverse(); 

Nhưng lưu ý rằng đây không phải là một SortedDictionary, do đó thứ tự không nhất thiết phải được bảo đảm trong lần đầu tiên địa điểm. Có lẽ bạn muốn OrderByDescending thay thế?

+0

+1 để đề cập rằng thứ tự trong từ điển không được đảm bảo. –

0

Nó có sẵn với LINQ: d.Reverse()

3

lẽ OrderByDescending trên phím. Như thế này:

d.OrderByDescending (x =>x.Key) 

Foreach như thế này:

foreach (var element in d.OrderByDescending (x =>x.Key)) 
{ 

} 
Các vấn đề liên quan