gpt4 book ai didi

以字节数组为键的 C# SortedList

转载 作者:行者123 更新时间:2023-11-30 20:53:45 29 4
gpt4 key购买 nike

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

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

问题是,我无法将条目添加到 myList 中,因为 .NET 不知道如何比较列表的两个元素(“比较数组中的两个元素时出错”):

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

经过一些谷歌搜索后,我读到了一些关于实现我自己的 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);
}
}

并调用它:

    public SortedList<byte[], string> myList = new SortedList<byte[], string>(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);
}
}

这甚至可以扩展到一个泛型类,用于比较任何实现了 IComparable<T> 的类型的数组。 :

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

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

关于以字节数组为键的 C# SortedList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19695629/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com