【问题标题】:Comparing two Array in C# [duplicate]比较 C# 中的两个数组 [重复]
【发布时间】:2013-11-19 11:36:47
【问题描述】:

我是 C# 新手,只是比较两个数组...两个数组应该相等,因为它们的值相同,但结果总是错误...不知道为什么。

char[] arOne =  { 'a', 'b', 'c', '\u0000' };
char[] arTwo = new char[] { 'a', 'b', 'c', '\u0000' };
Console.WriteLine(" Two arrays are equal ? ...{0}", (arOne == arTwo) ? "true" : "false");

【问题讨论】:

标签: c# arrays compare


【解决方案1】:

尝试使用它

Enumerable.SequenceEqual Method (IEnumerable, IEnumerable)

bool areEqual = arOne.SequenceEqual(arTwo);

您所做的是比较对象引用而不是集合的实际内容。

【讨论】:

    【解决方案2】:

    使用此代码:

    Console.WriteLine("Two arrays are equal? ...{0}", arOne.Intersect(arTwo).Any() ? "true" : "false");
    

    【讨论】:

    • 它不会检查表是否相同,它会返回 true 到 {0} 和 {0,1}
    【解决方案3】:

    == 运算符只是比较引用,如果它们不相同,则返回 false。你可以使用SequenceEqual:

    bool bothSameChars = arOne.SequenceEqual(arTwo);
    

    SequenceEqual也考虑了顺序,如果没关系,你可以使用HashSet<Char>,这是非常有效的SetEquals方法:

    HashSet<Char> charset1 = new HashSet<Char>(arOne);
    HashSet<Char> charset2 = new HashSet<Char>(arTwo);
    bothSameChars = charset1.SetEquals(charset2);
    

    【讨论】:

      【解决方案4】:

      考虑以下代码...

      Console.WriteLine(" Two arrays are equal ? ...{0}", Enumerable.SequenceEqual(arOne, arTwo) ? "true" : "false");
      

      祝你好运!

      【讨论】:

        【解决方案5】:

        您当前正在检查两个对象的 REFERENCE 并检查它们是否相等,显然它们不相等。你要做的是检查他们的 CONTENT AND SEQUENCE 是否相等,为此他们发明了很棒的函数.SequenceEqual()。您的代码将类似于

        char[] arOne = { 'a', 'b', 'c', '\u0000' };
        char[] arTwo = new char[] { 'a', b', 'c', '\u0000' };
        Console.WriteLine(" Two arrays are equal ? ... {0}", (arOne.SequenceEqual(arTwo)));
        

        因为 SequenceEqual() 已经返回一个布尔值,所以您甚至不必再添加 ? "true" : false"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多