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
和.SequenceEqual
是System.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# 整数数组列表不包含项目的主要内容,如果未能解决你的问题,请参考以下文章