2012-04-16 13 views
9

Bir Sözlük ve it.For Örneğin bazı öğeleri eklendi, C# 'Bir sözlük <string, string> C# içinde ters sırada (sondan ilke) nasıl yinelemeli?

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

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

, sözlük order.but ben şimdi ilk (yani sırasını tersine son gelen bu değerleri yineleme istiyorum doğal öğeleri tutar), yani, ytye'yi okumak istiyorum, gdlh ve nihayet İçerik'i,

.

+3

Sen devlet * * "C#, sözlük doğal sırayla unsurları tutar". Bu doğru değil. [Açıklamalar bölümü] (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx) * "Öğelerin döndürülme sırası tanımsızdır." * –

+1

@Daniel Hilgarth Bu benim ilk adımdı düşündüm ve böyle yorumladım, ama kaldırdım çünkü bazı kodları test ettim ve işe yarıyor. Bu yüzden biraz daha araştırma yaptım. Sonunda, sözlüğü yeniden boyutlandırmak için zorlarsa, ekleme sırasında öğelerin yeniden sıralanması mümkündür. SortedDictionary, tuşların sırasına atıfta bulunur, ancak bunu bir karşılaştırma yapabilir… OrderedDictionary, genel olmayan bir şeydir, ancak ihtiyacı olan şey olabilir. –

+0

Bu konuda bir kez çok büyük bir argümana girdim - standart bir Sözlükdeki * sayılan girişlerin "sırası", temelde onları koyduğunuz emirdir. BU GÜVENİLİR DAVRANIŞ DEĞİLDİR! Her zaman böyle olacağının varsayılması son derece zordur. – JerKimball

cevap

14

Sadece Linq uzantısı yöntemi Reverse

mesela kullanmak ... Bu sorunla çıkmak kılavuz Lütfen

var reversed = d.Reverse(); 

Ama bu SortedDictionary değil, bu yüzden sipariş mutlaka birinci garanti olmadığını dikkate: yerinde değil tersini sağlayan

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

Kullanım LINQ Ters ancak not yer. Belki bunun yerine OrderByDescending istiyorsun?

+0

+1, sözlükteki sıranın garanti edilmediğinden bahsetmek için. –

0

O Linq ile kullanılabilir: tuş üzerinde d.Reverse()

3

Belki OrderByDescending. Şunun gibi: Böyle

d.OrderByDescending (x =>x.Key) 

Foreach:

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

} 
İlgili konular