C# 整数数组列表不包含项目
C# List of Integer Arrays does not Contain Item
我的目标是将未知数量的整数坐标添加到集合中。虽然我可以将这些坐标添加到此列表 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
.
相同
如果有什么我不明白的地方,或者如果有其他选择,我会洗耳恭听。
看来你想要:
bool contains = coordList.Any(a => a.SequenceEqual(new int[]{1, 3}));
.Any
和 .SequenceEqual
是 System.Linq
命名空间提供的扩展方法。您可能需要确保在代码文件的顶部有 using System.Linq;
才能完成这项工作。
如果你使用值元组,你将免费获得值比较,代码也会变得更整洁:
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);
来自 OP
回答
所以,我根据 Llama 的建议创建了一个新函数:
static bool ContainsCoordinate(int[] coords, List<int[]> coordList) {
bool contains = coordList.Any(a => a.SequenceEqual(coords));
return contains;
}
这很有魅力。
我还要感谢 Ron Beyer 帮助我更多地了解对象声明和实例化,
我的目标是将未知数量的整数坐标添加到集合中。虽然我可以将这些坐标添加到此列表 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
.
如果有什么我不明白的地方,或者如果有其他选择,我会洗耳恭听。
看来你想要:
bool contains = coordList.Any(a => a.SequenceEqual(new int[]{1, 3}));
.Any
和 .SequenceEqual
是 System.Linq
命名空间提供的扩展方法。您可能需要确保在代码文件的顶部有 using System.Linq;
才能完成这项工作。
如果你使用值元组,你将免费获得值比较,代码也会变得更整洁:
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);
来自 OP
回答
所以,我根据 Llama 的建议创建了一个新函数:
static bool ContainsCoordinate(int[] coords, List<int[]> coordList) {
bool contains = coordList.Any(a => a.SequenceEqual(coords));
return contains;
}
这很有魅力。
我还要感谢 Ron Beyer 帮助我更多地了解对象声明和实例化,