2

SortedList でキーとして使用されるバイト配列を比較したい

public SortedList<byte[], string> myList = new SortedList<byte[], string>();

問題は、.NETがリストの2つの要素を比較する方法を知らないため、myListにエントリを追加できないことです(「配列内の2つの要素を比較するエラー」):

byte[] bytearray = {0,0,25,125,250}; // Example 
string description = "Example Value";
myList.Add(bytearray, description);

少しグーグルで調べた後、独自の IComparer Class の実装について何かを読みました。さらに検索しましたが、バイト配列の IComparer 実装については何も見つかりませんでした。これを達成する方法はありますか?

クイック編集: 回答ありがとうございます! 提供された回答から IComparer を実装しました。

    class ByteComparer : IComparer<byte[]>
    {
        public int Compare(byte[] x, byte[] y)
        {
            var len = Math.Min(x.Length, y.Length);
            for (var i = 0; i < len; i++)
            {
                var c = x[i].CompareTo(y[i]);
                if (c != 0)
                {
                    return c;
                }
            }

            return x.Length.CompareTo(y.Length);
        }
    }

そしてそれを呼び出す:

    public SortedList<byte[], string> myList = new SortedList<byte[], string>(new ByteComparer());
4

3 に答える 3

1

インターフェイスを実装するクラスを作成する必要がありIComparer<byte[]>ます。このインターフェイスには 1 つのメソッドがありますpublic int Compare(byte[] first, byte[] second)first < secondこのメソッドは、負の int if 、0 if first == second、および正の int ifを返す必要がありfirst > secondます。<アプリケーションで、==、およびが何を>意味するかを理解し、それに応じてメソッドを記述する必要があります。

于 2013-10-30T23:27:25.180 に答える
0

それは本当にロジックフローに依存します。byte array aより小さいとはどういう意味byte array bですか? 何を比較する必要がありますか?とにかく、1 つの単純なメソッドを実装するだけです。int Compare(byte[] x, byte[] y)

于 2013-10-30T23:31:12.433 に答える