2012-12-12 15 views

Odpowiedz

4

Poniżej podamy posortowany słownik oparty na Twoim OrderedDictionary.

var normalOrderedDictionary= od.Cast<DictionaryEntry>() 
         .OrderBy(r=> r.Value) 
         .ToDictionary(c=> c.Key, d=> d.Value); 

Jest jedna rzecz, chociaż, ToDictionary powrócił regularne słownika ale kolejność jest utrzymywana w słowniku dla odnośnika, tak szybko, jak każdy nowy element jest wstawiany w słowniku, że zamówienie nie może być zagwarantowana. Aby tego uniknąć, należy SortedDictionary<TKey,TValue> który ma konstruktora, które odbywają regularne słownika jako parametr

var sortedDictionary = new SortedDictionary<string, string>(normalOrderedDictionary); 

(upewnij się, aby zastąpić string z poprawnych typów dla kluczy i wartości w powyższej linii).

wyjściowa:

foreach (var entry in sortedDictionary) 
    Console.WriteLine("Key: {0} Value: {1}", entry.Key, entry.Value); 

Key: a3 Value: 2 
Key: a1 Value: 3 
Key: a4 Value: 4 
Key: a2 Value: 5 
+1

Dzięki Habib ... twoja odpowiedź też zadziałała. Po prostu nie mam zbyt wielu punktów reputacji. –

+2

OK dzięki .. Należy powiedzieć stackoverflow po prostu skały .. !! –

+1

@LalaTrivedi, zapraszam – Habib

2

Możesz łatwo wyliczyć wartości/wpisy według wartości. Musisz tylko rzucić na odpowiedni typ, aby aktywować funkcje linq.

var sortedOrder = od.Values 
    .Cast<int>()  // this is an enumeration of ints 
    .OrderBy(i => i);; // enumerate through ordered by the value 

foreach (var item in sortedOrder) 
{ 
    // do stuff 
} 
+0

Great..This pomoże. Również co robi metoda AsQueryable(). Czy mogę zapytać linq o sortowanie. –

+0

'AsQueryable()' po prostu rzuca kolekcji jako 'IQueryable ' (w przeciwieństwie do 'IEnumerable '). IQueryables akceptują wyrażenia LINQ (http://msdn.microsoft.com/en-us/library/bb506649.aspx) oraz wyrażenia lambda podczas tworzenia zapytań ułatwiających tworzenie zapytań dynamicznych. –

Powiązane problemy