【问题标题】:Compare two int arrays比较两个 int 数组
【发布时间】:2014-10-27 02:38:22
【问题描述】:

我写了这段代码:

class Program
{
    static void Main(string[] args)
    {
        Test t = new Test();
        int[] tal1 = { 3, 2, 3};
        int[] tal2 = { 1, 2, 3};

        Console.WriteLine(t.theSameInBoth(tal1,tal2));
    }
}

class Test
{
    public Boolean theSameInBoth(int[] a, int[] b)
    {
        bool check = false;

        if (a.Length == b.Length)
        {
            for (int i = 0; i < a.Length; i++)
                if (a[i].Equals(b[i]))
                {
                    check = true;
                    return check;
                }
        }

        return check;
    }
}

所以这里的交易是。我需要发送两个带有数字的数组。然后我需要检查数组。如果数组中的所有数字都相同。我需要将我的支票设置为真并返回它。唯一的问题是。使用我在这里设置的代码,我发送了一个包含 3,2,3 的数组和一个包含 1,2,3 的数组,它仍然返回检查为真。

我是这方面的新手,所以我希望这里的任何人都可以帮助我!

【问题讨论】:

  • 这是学校的代码作业。问题是我不能使用它。我已经尝试过了,并且像魅力一样工作。但遗憾的是我不能使用它。
  • 哦,请公平对待反对票,伙计们。老实说... ;-)
  • LINQ 很灵巧,但有没有人运行性能测试,看看它与在一个好的老式循环中运行命令式代码的比较相比如何?此外,如果这是一项学校作业,可能是作为学习如何编程的练习,而不是作为学习 Microsoft 的 LINQ 语法的练习,那么命令式代码方法可能更合适。

标签: c#


【解决方案1】:

你需要反转测试:

class Test
{
    public bool theSameInBoth(int[] a, int[] b)
    {
        if (a.Length == b.Length)
        {
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] != b[i])
                {
                    return false;
                }
            }

            return true;
        }

        return false;
    }
}

只要一对项目不同,这两个数组就不同了。

在您的代码中,您实际上说过只要一对项目相等,两个数组就相等。

【讨论】:

  • 也很好用!非常感谢!
【解决方案2】:

一旦找到第一个匹配项,您就会返回。你需要这样的东西:

bool check = true;

if (a.Length == b.Length)
{
   for (int i = 0; i < a.Length; i++)
   {
      if (!a[i].Equals(b[i]))
      {
            check = false;
            break;
       }

   }
   return check;
}
else 
  return false;

【讨论】:

  • 非常感谢!像魅力一样工作
  • 最后一个 else 是多余的。 ;-)
【解决方案3】:
bool isIndentical = true;

if (a.Length == b.Length)
{
    for (int i = 0; i < a.Length; i++)
         if (!a[i].Equals(b[i]))
         {
            isIndentical = false;
            return check;
         }
}

return isIndetical;

像这样试试。您的代码总是返回true,因为如果数组的元素之一相等,则if 语句中的代码将返回true。在我的情况下,我正在检查不相等,如果发生这种情况,只需返回 false。看到我使用了其他变量,这使得这一点更加清晰,并在乞求中实现。

【讨论】:

  • 工作就像一个魅力!非常感谢!
  • @NickolaiSchmidt 如果答案对您有帮助,您可以接受它。祝你的项目好运。
【解决方案4】:

我的习惯是添加Linq解决方案:

public bool IsSame(int[] a, int[] b)
{
    return a.Length == b.Length &&
           a.Select((num, index) => num == b[index]).All(b => b);
}

另一种很酷的 Linq 方法:

public bool IsSame(int[] a, int[] b)
{
    return a.Length == b.Length &&
           Enumerable.Range(0, a.Length).All(i => a[i] == b[i]);
}

【讨论】:

  • 我得研究一下 LINQ。还没看完!所以基本上你写的和我写的一样吗?似乎是更简单的解决方案。
  • 分解,它看起来有点不同,但从逻辑上讲,它做同样的事情,是的。有效地说,简单的循环更好,但非常微不足道。你应该选择任何你更喜欢阅读和理解的东西,这可能不是 Linq。再说一次,我就是喜欢 Linq。
  • linq中已经有这样的功能了:a.SequenceEqual(b)
  • 是的,我已经尝试过 SequenceEqual,它看起来更简单,但正如我所说,但这是学校作业,我们被告知不要使用它
  • @NickolaiSchmidt 那么任务到底是什么?
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2012-12-26
相关资源
最近更新 更多