【问题标题】:How to sort two arraylist and then compare that they are same如何对两个arraylist进行排序然后比较它们是否相同
【发布时间】:2014-05-22 06:57:54
【问题描述】:

我正在尝试对两个数组元素进行排序并将它们相互匹配,如果任何一个匹配它返回幸运,否则不幸运,任何我会出错的想法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Apptest
{
class Program
{
    static void Main(string[] args)
    {
        int[] arr1 = { 5,4,3,8,1};
        int[] arr2 = { 8,1,5,4,3};
        string str = rollingdice(arr1, arr2);
        Console.WriteLine(str);
    }
    public static string rollingdice(int[] input1, int[] input2)
    {
       // input1.Sort();
        //input2.Sort();
        for(int i=0;i<input1.Length && i<input2.Length;i++)
        {
            if (!Object.Equals(input1[i], input2[i]))
            {
                return "unlucky";
            }
            else
            {
                return "Lucky";
            }
        }
    }
}
}

【问题讨论】:

  • 你不知道你哪里出错了吗?错误消息、意外行为等。
  • 你能澄清一下你的要求吗?每个元素都必须在两个数组之间匹配还是只有一个元素必须匹配?我读到`如果任何一个匹配它返回幸运否则不幸运`意味着只有一个匹配。我猜英语不是你的第一语言,所以这不是批评,只是要求澄清。也许有一些例子说明什么是幸运的,什么不是。例如,{1,2,3}{1,2,4} 所在的数组是否幸运? {1,1,2}{1,2,2} 怎么样?

标签: c#


【解决方案1】:

你可以使用Enumerable.SequenceEqual:

Array.Sort<int>(input1);
Array.Sort<int>(input2);
bool equal = input1.SequenceEqual(input2);
return equal ? "lucky" : "unlucky";  // lucky in your sample

【讨论】:

  • 不要忘记luckyunlucky之间的:
  • 嗯...我读到“如果有任何一个匹配,它会返回幸运,否则不幸运”意味着只有一个匹配。我想是时候要求澄清了。 :)
  • @user3417203:是什么让你觉得上面的代码不能进入rollingdice方法?
  • @user3417203 你可以使用Array.Sort(input1)
  • @user3417203:抱歉,已修复。现在我正在使用Array.Sort(我应该在我的测试项目中删除这些令人困惑的扩展)。
【解决方案2】:

在这种情况下检查是否相等的最短方法是:

bool equal = arr1.Length == arr2.Length && !arr1.Except(arr2).Any();

【讨论】:

  • 如果数组中有重复项,这可能不一定有效。即应将 (1,1,2) 视为 (1,2,2) 的匹配项。这个问题非常不清楚实际要求是什么。
  • 哎呀,Enumerable.Except 返回两者之间的差异,而不是 int。但即使你修复它,它也不是一个可行的方法。 Enumerable.Except 使用删除重复项的集合。所以1,11 相同。您也只检查一侧,所以如果所有arr1 都在arr2 中,但不是相反。
  • @TimSchmelter 哎呀,我的错!
  • @Chris 已编辑,现在也考虑到这一点。
【解决方案3】:

你必须分配排序数组的结果

var foo = input1.Sort();
var bar = input2.Sort();

然后比较 foo 和 bar。

【讨论】:

  • 数组上的Sort 方法不是实例方法(它是static)。此外,该方法“就地”排序(与例如 Linq 的 OrderBy 不同),所以不,您不分配结果(void 返回类型不能分配给变量)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 2016-09-23
相关资源
最近更新 更多