【问题标题】:C# List of Integer Arrays does not Contain ItemC# 整数数组列表不包含项目
【发布时间】: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,啊!对,谢谢!
  • 您应该将您的答案作为实际答案,而不是问题的一部分。欢迎您回答自己的问题

标签: c# arrays list arraylist integer


【解决方案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 帮助我更多地了解对象声明和实例化,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-04
      • 2022-01-08
      • 1970-01-01
      • 2023-01-22
      • 2015-03-04
      相关资源
      最近更新 更多