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