排序列表<;keyValuePair<;字符串,字符串>>;
本文关键字:gt lt 字符串 keyValuePair 排序 列表 | 更新日期: 2023-09-27 17:59:45
我在C#
.net2.0
中执行我有一个包含两个字符串的列表,我想对它进行排序。列表类似于List<KeyValuePair<string,string>>
我必须根据第一个string
进行排序,即:
- ACC
- ABLA
- SUD
- FLO
- IHNJ
我尝试使用Sort()
,但它给了我一个异常:"无效操作异常","无法比较数组中的两个元素"。
你能建议我做这件事的方法吗?
在使用.NET 2.0时,您必须创建一个实现IComparer<KeyValuePair<string, string>>
的类,并将其实例传递给Sort
方法:
public class KvpKeyComparer<TKey, TValue> : IComparer<KeyValuePair<TKey, TValue>>
where TKey : IComparable
{
public int Compare(KeyValuePair<TKey, TValue> x,
KeyValuePair<TKey, TValue> y)
{
if(x.Key == null)
{
if(y.Key == null)
return 0;
return -1;
}
if(y.Key == null)
return 1;
return x.Key.CompareTo(y.Key);
}
}
list.Sort(new KvpKeyComparer<string, string>());
如果您要使用较新版本的.NET框架,您可以使用LINQ:
list = list.OrderBy(x => x.Key).ToList();
为什么不使用SortedDictionary?
下面是MSDN上的文章:
http://msdn.microsoft.com/en-us/library/f7fta44c(v=vs.80).aspx
您可以只使用Comparison<T>
泛型委托。然后,您就不需要定义一个类来实现IComparer<T>
,而只需要确保您定义的方法与委托签名相匹配。
private int CompareByKey(KeyValuePair<string, string>, KeyValuePair<string, string> y)
{
if (x.Key == null & y.Key == null) return 0;
if (x.Key == null) return -1;
if (y.Key == null) return 1;
return x.Key.CompareTo(y.Key);
}
list.Sort(CompareByKey);
List<KeyValuePair<string, string>> pairs = new List<KeyValuePair<string, string>>();
pairs.Add(new KeyValuePair<string, string>("Vilnius", "Algirdas"));
pairs.Add(new KeyValuePair<string, string>("Trakai", "Kestutis"));
pairs.Sort(delegate (KeyValuePair<String, String> x, KeyValuePair<String, String> y) { return x.Key.CompareTo(y.Key); });
foreach (var pair in pairs)
Console.WriteLine(pair);
Console.ReadKey();