排序列表<keyvaluepair <string,string>&gt; </keyvaluepair <string,string>

时间:2013-02-15 12:46:19

标签: c# .net

我在C# .net2.0进行此操作 我有一个包含两个字符串的列表,我想对它进行排序。 列表就像List<KeyValuePair<string,string>>

我必须根据第一个string对其进行排序,即:

  • ACC
  • ABLA
  • SUD
  • FLO
  • IHNJ

我尝试使用Sort(),但它给了我例外:“无效的操作异常”,“无法比较数组中的两个元素”

无论如何我能建议我这样做吗?

4 个答案:

答案 0 :(得分:8)

当您遇到.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();

答案 1 :(得分:3)

为什么不使用SortedDictionary呢?

以下是关于它的MSDN文章:

http://msdn.microsoft.com/en-us/library/f7fta44c(v=vs.80).aspx

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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();