以字节数组为键的C#SortedList

以字节数组为键的C#SortedList,c#,arrays,icomparer,C#,Arrays,Icomparer,我想比较在SortedList中用作键的字节数组 public SortedList<byte[], string> myList = new SortedList<byte[], string>(); 通过谷歌搜索,我读到了一些关于实现自己的IComparer类的内容。我进一步搜索了,但没有找到任何关于字节数组的IComparer实现的信息。你知道如何做到这一点吗 快速编辑: 谢谢你的回答!我已经根据提供的答案实现了IComparer: class ByteC

我想比较在SortedList中用作键的字节数组

public SortedList<byte[], string> myList = new SortedList<byte[], string>();
通过谷歌搜索,我读到了一些关于实现自己的IComparer类的内容。我进一步搜索了,但没有找到任何关于字节数组的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);
        }
    }
类字节比较器:IComparer
{
公共整数比较(字节[]x,字节[]y)
{
var len=数学最小值(x.长度,y.长度);
对于(变量i=0;i
并称之为:

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

像这样的东西怎么样

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);
    }
}
类字节比较器:IComparer
{
公共整数比较(字节[]x,字节[]y)
{
var len=数学最小值(x.长度,y.长度);
对于(变量i=0;i
这甚至可以扩展到一个泛型类,用于比较实现
IComparable
的任何类型的数组:

class ArrayComparer:IComparer
其中T:i可比较
{
公共整数比较(T[]x,T[]y)
{
var len=数学最小值(x.长度,y.长度);
对于(变量i=0;i

这将找到两个数组之间不同的第一个元素,并返回一个值,该值指示根据类型的默认顺序,哪个元素先出现。如果没有差异,它将返回一个值,指示哪个数组较短。

类似的内容如何

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);
    }
}
类字节比较器:IComparer
{
公共整数比较(字节[]x,字节[]y)
{
var len=数学最小值(x.长度,y.长度);
对于(变量i=0;i
这甚至可以扩展到一个泛型类,用于比较实现
IComparable
的任何类型的数组:

class ArrayComparer:IComparer
其中T:i可比较
{
公共整数比较(T[]x,T[]y)
{
var len=数学最小值(x.长度,y.长度);
对于(变量i=0;i

这将找到两个数组之间不同的第一个元素,并返回一个值,该值指示根据类型的默认顺序,哪个元素先出现。如果没有差异,它将返回一个值,指示哪个数组较短。

您需要创建一个实现
IComparer
接口的类。此接口有一个方法-
公共int比较(字节[]第一,字节[]第二)
。如果
first
,则该方法应返回负整数;如果
first==second
,则该方法应返回0;如果
first>second
,则该方法应返回正整数。您需要了解应用程序中的
含义,并相应地编写方法。

您需要创建一个实现
IComparer
接口的类。此接口有一个方法-
公共int比较(字节[]第一,字节[]第二)
。如果
first
,则该方法应返回负整数;如果
first==second
,则该方法应返回0;如果
first>second
,则该方法应返回正整数。您需要了解应用程序中的
含义,并相应地编写方法。

这实际上取决于您的逻辑流。什么意思是
字节数组a
小于
字节数组b
?你应该比较什么?无论如何,您只需要实现一个简单的方法:
intcompare(byte[]x,byte[]y)

这实际上取决于您的逻辑流。什么意思是
字节数组a
小于
字节数组b
?你应该比较什么?无论如何,您只需要实现一个简单的方法:
int Compare(byte[]x,byte[]y)

只需执行一个数组。SequenceEquals在您自己的IComperer实现中的值之间。但它不只返回一个对我有用的值吗?如果数组相等,SequenceEquals会为我提供信息,那么“大”或“低”(IComprarer的值为1,0,-1)如何?只需在您自己的IComperer实现中的值之间执行一个数组。SequenceEquals。但它不只返回一个对我有用的值吗?SequenceEquals会为我提供信息,如果数组相等,那么“更大”或“更低”(IComprarer的值为1,0,-1)如何?谢谢你的帮助!很有魅力:-)不错,真的很优雅。谢谢你的帮助!很有魅力:-)不错,真的很优雅。谢谢你的解释!给p.s.w.g的答案增加了很多!谢谢你的解释!给p.s.w.g的答案增加了很多!
class ArrayComparer<T> : IComparer<T[]>
    where T : IComparable<T>
{
    public int Compare(T[] x, T[] 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);
    }
}