我在做C#
.net2.0
我有一個包含兩個字符串的列表,我想對它進行排序。 名單就像是List<KeyValuePair<string,string>>
排序列表<keyValuePair <字符串,字符串>>
我有根據第一string
對它進行排序,這就是:
- ACC
- ABLA
- SUD
- FLO
- IHNJ
餘噸裏德使用Sort()
,但它給我的例外:「無效操作異常」,「無法比較數組兩個元素」。
您能否提供我了,反正在我能做到這一點?
我在做C#
.net2.0
我有一個包含兩個字符串的列表,我想對它進行排序。 名單就像是List<KeyValuePair<string,string>>
排序列表<keyValuePair <字符串,字符串>>
我有根據第一string
對它進行排序,這就是:
餘噸裏德使用Sort()
,但它給我的例外:「無效操作異常」,「無法比較數組兩個元素」。
您能否提供我了,反正在我能做到這一點?
當你被卡住.NET 2.0中,你必須創建一個實現3210一類,並通過它的一個實例給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);
你能告訴我如何做一個IComparer或任何教程,我可以很容易地找到如何做到這一點。 – sudhanshu 2013-02-15 12:54:44
@sudhanshu:請參閱更新我的答案。 – 2013-02-15 12:59:39