2011-04-06 100 views
0

我有一個字典,我想按人物排序,有誰能寫我如何做?是啊,我試圖找到它在互聯網上,但沒有成功:((C# - 排序字典

類主題有3個參數應用 - 名稱(字符串),FAMILY_NAME(串),年齡(INT)

我想。通過分揀出例如FAMILY_NAME,如果相同則根據年齡和最後的名字(如果還年齡相同) - 任何人都可以給我寫的代碼怎麼辦呢?非常感謝您的幫助;-)

回答

2

Dictionary類由於存儲值的方式而無法排序,但可以使用LINQ輕鬆獲得字典中的值的排序集合。

var sorted = dictionary.Values.OrderBy(s => s.name) 
           .ThenBy(s => s.family_name) 
           .ThenBy(s => s.age); 
+0

好吧,這很簡單,也許是最好的解決方案,但我可以從字典中獲得int嗎?或者我應該只將int複製到列表中? :) – 159753 2011-04-06 18:32:23

+0

你在說什麼int?字典的關鍵值? – StriplingWarrior 2011-04-06 19:00:46

0

詞典是沒有訂單的結構,所以你不能對它進行分類 - 你可以對訂單結構進行排序,如列表

0

您可以使用SortedListSortedDictionary,這兩者的排序的關鍵。

由於鍵是您創建的類,因此您可以將IEqualityComparer傳遞到構造函數中以控制它的排序方式。

0

定義人士及比較器類:

public class Person 
    { 
     public string Name { get; set; } 
     public string FamilyName { get; set; } 
     public int Age { get; set; } 
    } 

    public class PersonComparer : IComparer<KeyValuePair<string, Person>> 
    { 
     public int Compare(KeyValuePair<string, Person> x, KeyValuePair<string, Person> y) 
     { 
      var result = x.Value.FamilyName.CompareTo(y.Value.FamilyName); 
      if(result != 0) 
       return result; 

      return x.Value.Age.CompareTo(y.Value.Age); 
     } 
    } 

,並使用這些類說謊這樣的:

var myDictionary = new Dictionary<string, Person>(); 
//fill your dictionary 
var list = myDictionary.ToList(); 
list.Sort(new PersonComparer()); 

這是一個簡單和工作方案。