4

私はC# .net2.0 2つの文字列を含むリストを持っていて、それを並べ替えたいと思っています。リストはList<KeyValuePair<string,string>>

最初の に従ってソートする必要がありますstring。これは次のとおりです。

  • ACC
  • アブラ
  • SUD
  • FLO
  • IHNJ

を使用しようとしましたが、 「無効な操作の例外」、「配列内の 2 つの要素を比較Sort()できませんでした」という例外が発生します。

とにかく私がこれを行うことができることを私に提案できますか?

4

4 に答える 4

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 Framework を使用する場合は、LINQ を使用できます。

list = list.OrderBy(x => x.Key).ToList();
于 2013-02-15T12:51:57.293 に答える
5

代わりにSortedDictionaryを使用してみませんか?

これに関するMSDNの記事は次のとおりです。

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

于 2013-02-15T12:56:54.673 に答える
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);
于 2013-02-15T13:25:59.987 に答える