簡體   English   中英

C#-排序字典

[英]C# - sorting Dictionary

我有一本字典,我想按人對它進行排序,有人可以寫信給我怎么做嗎? 是的,我試圖在互聯網上找到它,但是沒有成功:((

課程主題具有3個參數-名稱(字符串),family_name(字符串),年齡(int)。

我想按例如family_name排序,如果相同則按年齡排序,最后按名稱排序(如果年齡也相同)-有人可以給我寫代碼怎么做嗎? 非常感謝你的幫助 ;-)

您可以使用SortedDictionarySortedList 您也想為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);

字典是沒有順序的結構,因此您無法對其進行排序-您可以對有序列的結構(如列表)進行排序

您可以使用SortedListSortedDictionary ,二者均按鍵排序。

由於鍵是您創建的類,因此可以將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM