繁体   English   中英

如何比较两个数组列表?

[英]How do I compare two lists of arrays?

我有以下代码:

List<byte[]> list1 = new List<byte[]>();
list1.Add(new byte[] { 0x41, 0x41, 0x41, 0x41, 0x78, 0x56, 0x34, 0x12 });

List<byte[]> list2 = new List<byte[]>();
list2.Add(new byte[] { 0x41, 0x41, 0x41, 0x41, 0x78, 0x56, 0x34, 0x12 });
list2.Add(new byte[] { 0x42, 0x42, 0x42, 0x42, 0x78, 0x56, 0x34, 0x12 }); // this array

IEnumerable<byte[]> list3 = list2.Except(list1);

我希望list3只包含list2中但不在list1中的byte []数组(标记为“this array”的数组),而是只返回list2的全部内容。 那么我尝试了以下内容:

List<byte[]> list3 = new List<byte[]>();
foreach (byte[] array in list2)
    if (!list1.Contains(array))
        list3.Add(array);

但这让我得到了同样的结果。 我究竟做错了什么?

ExceptContains调用对象的Equals方法。 但是,对于数组, Equals只执行引用相等性检查。 要比较内容,请使用SequenceEqual扩展方法。

您必须在循环中更改支票:

List<byte[]> list3 = new List<byte[]>();
foreach (byte[] array in list2)
    if (!list1.Any(a => a.SequenceEqual(array)))
        list3.Add(array);

您的列表只包含一个元素。 它们中的每一个都包含一个字节数组,并且这些字节数组彼此不同,这就是为什么Except和您的实现返回相同的结果。

我不是ac#expert,但您可以尝试定义以下列表:

List<byte> list1 = new List<byte>();

使用等于功能。 假设cont_stream是一个字节数组

bool b = cont_stream[1].Equals(cont_stream[2]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM