繁体   English   中英

如何在C#中对列表进行排序?

[英]How to sort a List in C#?

我有以下列表:

List<Dictionary<int, Dictionary<string, string>>> lngList
lngList.Add(new Dictionary<int,Dictionary<string,string>>().Add(1,new Dictionary<string,string>().Add("Item1Key","Item1Value")));
lngList.Add(new Dictionary<int,Dictionary<string,string>>().Add(3,new Dictionary<string,string>().Add("Item1Key","Item1Value")));
lngList.Add(new Dictionary<int,Dictionary<string,string>>().Add(2,new Dictionary<string,string>().Add("Item1Key","Item1Value")));
lngList.Add(new Dictionary<int,Dictionary<string,string>>().Add(4,new Dictionary<string,string>().Add("Item1Key","Item1Value")));

我需要根据字典中存在的整数值对该列表进行排序(升序)。

这必须在不使用LINQ的情况下实现。

PS这是假设所有添加的整数值都是唯一的。

如果每个词典只有一个键,并且您不关心如果有多个键,会发生什么,您可以这样做:

lngList.Sort((a, b) => a.Keys.First().CompareTo(b.Keys.First()));

由于您说“必须在不使用LINQ的情况下实现”,所以我假设您的意思是System.Linq命名空间不可用。 但这不是问题:您只需要.First() ,就可以轻松定义自己:

public static class EnumerableExtensions {
    public static T First<T>(this IEnumerable<T> source) {
        using (var e = source.GetEnumerator()) {
            if (!e.MoveNext())
                throw new InvalidOperationException("The collection is empty.");
            return e.Current;
        }
    }
}

如果必须使用没有lambda表达式或扩展方法的.NET 2.0,请改用以下方法:

lngList.Sort(new Comparison<Dictionary<int, Dictionary<string, string>>>(sortFunc));

public int sortFunc(Dictionary<int, Dictionary<string, string>> a,
                    Dictionary<int, Dictionary<string, string>> b)
{
    return First(a.Keys).CompareTo(First(b.Keys));
}

public static T First<T>(IEnumerable<T> source) {
    using (var e = source.GetEnumerator()) {
        if (!e.MoveNext())
            throw new InvalidOperationException("The collection is empty.");
        return e.Current;
    }
}

解决方案的最简单方法是使用SortedList而不是List:

例:

SortedList<int, Dictionary<string, string>> lngList;

默认情况下,它将按整数值排序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM