[英]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.