c# -排序字典

本文关键字:字典 排序 | 更新日期: 2023-09-27 17:48:56

我有一个字典,我想按人排序,谁能告诉我怎么做?是的,我试着在网上找到它,但没有成功:(

类主题有3个参数- name(字符串),family_name(字符串),age (int)。

我想排序,例如family_name,如果相同,然后按年龄,最后按名字(如果也年龄是相同的)-谁能给我写代码怎么做??非常感谢您的帮助;-)

c# -排序字典

您可以使用SortedDictionarySortedList;你也要把Person变成IComparer。有关它们的区别的讨论请参见此:http://msdn.microsoft.com/en-us/library/5z658b67(VS.80).aspx

由于Dictionary类存储值的方式,它不能排序,但是您可以使用LINQ轻松地获得字典中值的排序集合。

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

字典是没有顺序的结构,所以你不能对它排序——你可以对有序结构排序,比如list

您可以使用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());