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

SequenceEqual docs.

.Any.SequenceEqualSystem.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 帮助我更多地了解对象声明和实例化,