C# 整数数组列表不包含项目

Posted

技术标签:

【中文标题】C# 整数数组列表不包含项目【英文标题】:C# List of Integer Arrays does not Contain Item 【发布时间】:2021-12-28 22:51:57 【问题描述】:

我的目标是向集合中添加未知数量的整数坐标。虽然我可以将这些坐标添加到此列表中 List<int[]> coordList = new List<int[]>(); 我无法检查 coordList.Contains(specifiedCoordinate) 是否。

这是我目前所拥有的:

List<int[]> coordList = new List<int[]>();
coordList.Add(new int[] 1, 3);
coordList.Add(new int[] 3, 6);
bool contains = coordList.Contains(new int[]1, 3)
Console.WriteLine(contains);

但是,contains 始终是 false,即使我指定了与我添加的相同的值。 我已经尝试过ArrayList 作为可能的替代方案,但结果与使用List 相同。

如果有什么我不理解的地方,或者如果有替代方案,我会全力以赴。

【问题讨论】:

Int 数组是对象,您创建了两个单独的对象,即使值相同,这意味着它们不相等。 @RonBeyer,啊!对,谢谢! 您应该将您的答案作为实际答案,而不是问题的一部分。欢迎您回答自己的问题 【参考方案1】:

好像你想要的:

bool contains = coordList.Any(a => a.SequenceEqual(new int[]1, 3));

SequenceEqual docs.

.Any.SequenceEqualSystem.Linq 命名空间提供的扩展方法。您可能需要确保在代码文件的顶部有 using System.Linq; 才能完成这项工作。

【讨论】:

谢谢!我必须更加熟悉 Linq,看起来对这样的东西非常有用。【参考方案2】:

如果您使用值元组,您将免费获得值比较,代码也变得更简洁:

        var coordList = new List<(int x, int y)> 
                (1, 3),
                (3, 6)
        ;
        //contains is now true because 
        //value tuples do value comparison in their 'Equals' override 
        bool contains = coordList.Contains((1, 3));
        Console.WriteLine(contains);

【讨论】:

【参考方案3】:

来自 OP

回答

所以,我根据 Llama 的建议创建了一个新函数:

static bool ContainsCoordinate(int[] coords, List<int[]> coordList) 
    bool contains = coordList.Any(a => a.SequenceEqual(coords));
    return contains;

这只是一种魅力。

我还要感谢 Ron Beyer 帮助我更多地了解对象声明和实例化,

【讨论】:

以上是关于C# 整数数组列表不包含项目的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?

使用数组 C# WPF 中的项目填充列表框

检查列表是不是包含大于 C# 中的值的项目 [关闭]

C# LINQ 从数组/列表中不包含值的位置选择

C#比较两个列表之间的特定项目属性[重复]

返回一个包含每个内部数组元素数量的整数数组c#