[英]C# - sorting Dictionary
我有一本字典,我想按人對它進行排序,有人可以寫信給我怎么做嗎? 是的,我試圖在互聯網上找到它,但是沒有成功:((
課程主題具有3個參數-名稱(字符串),family_name(字符串),年齡(int)。
我想按例如family_name排序,如果相同則按年齡排序,最后按名稱排序(如果年齡也相同)-有人可以給我寫代碼怎么做嗎? 非常感謝你的幫助 ;-)
您可以使用SortedDictionary
和SortedList
; 您也想為Person
創建一個IComparer
。 請參閱此以了解它們之間的差異: http : //msdn.microsoft.com/zh-cn/library/5z658b67(VS.80).aspx
由於Dictionary
類無法存儲值,因此無法對Dictionary
類進行排序,但是您可以使用LINQ輕松獲取字典中具有的值的排序集合。
var sorted = dictionary.Values.OrderBy(s => s.name)
.ThenBy(s => s.family_name)
.ThenBy(s => s.age);
字典是沒有順序的結構,因此您無法對其進行排序-您可以對有序列的結構(如列表)進行排序
您可以使用SortedList或SortedDictionary ,二者均按鍵排序。
由於鍵是您創建的類,因此可以將IEqualityComparer傳遞到構造函數中以控制其排序方式。
定義一個Person和一個Comparer類:
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());
這是一個簡單且可行的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.