我有一個字典,我想按人物排序,有誰能寫我如何做?是啊,我試圖找到它在互聯網上,但沒有成功:((C# - 排序字典
類主題有3個參數應用 - 名稱(字符串),FAMILY_NAME(串),年齡(INT)
我想。通過分揀出例如FAMILY_NAME,如果相同則根據年齡和最後的名字(如果還年齡相同) - 任何人都可以給我寫的代碼怎麼辦呢?非常感謝您的幫助;-)
我有一個字典,我想按人物排序,有誰能寫我如何做?是啊,我試圖找到它在互聯網上,但沒有成功:((C# - 排序字典
類主題有3個參數應用 - 名稱(字符串),FAMILY_NAME(串),年齡(INT)
我想。通過分揀出例如FAMILY_NAME,如果相同則根據年齡和最後的名字(如果還年齡相同) - 任何人都可以給我寫的代碼怎麼辦呢?非常感謝您的幫助;-)
Dictionary
類由於存儲值的方式而無法排序,但可以使用LINQ輕鬆獲得字典中的值的排序集合。
var sorted = dictionary.Values.OrderBy(s => s.name)
.ThenBy(s => s.family_name)
.ThenBy(s => s.age);
詞典是沒有訂單的結構,所以你不能對它進行分類 - 你可以對訂單結構進行排序,如列表
還有SortedDictionary
和SortedList
你可以使用;你也想爲Person
製作IComparer
。有關它們之間的差異的討論,請參閱:http://msdn.microsoft.com/en-us/library/5z658b67(VS.80).aspx
您可以使用SortedList或SortedDictionary,這兩者的排序的關鍵。
由於鍵是您創建的類,因此您可以將IEqualityComparer傳遞到構造函數中以控制它的排序方式。
定義人士及比較器類:
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());
這是一個簡單和工作方案。
好吧,這很簡單,也許是最好的解決方案,但我可以從字典中獲得int嗎?或者我應該只將int複製到列表中? :) – 159753 2011-04-06 18:32:23
你在說什麼int?字典的關鍵值? – StriplingWarrior 2011-04-06 19:00:46