【问题标题】:How to compare two char arrays and display the different char?如何比较两个字符数组并显示不同的字符?
【发布时间】:2016-06-19 23:37:56
【问题描述】:

我想比较两个 char 数组,并且我希望(如果它们不相等)在输出上显示不同的 char。例如,在我下面的代码中,不同的字符是“y”。所以在输出上,我想写成:“不同的字符是 y,它在数组 ay 中但不在 ar 中”。我正在使用 C#,这是我编写的代码,CompareTo 方法出现错误。谁能帮我 ?提前致谢。 注意,我还是个初学者。

     char[] ar = { 'a', 'h', 'm', 'a', 'd' };
     char[] ay = { 'a', 'y', 'm', 'a', 'd' };
     if (ar.SequenceEqual(ay))
     {
        Console.WriteLine("Success");
     }
     else
     {
        Console.WriteLine("failure");
        char diff = ar.CompareTo((Object)ay));
        Console.Write(diff);
      }

【问题讨论】:

  • 你遇到了什么错误?
  • 我不确定你的要求是什么,但你可以用一些 for 或 for each 循环来做到这一点。对于每个差异,将不同的字符存储在单独的数组中。循环完成后,遍历包含差异的数组并输出结果
  • 您可以像这样测试相等: if(string.Join("", ar) == string.Join("",ay)), 要获得所有差异,您需要使用 Left Outer加入,它给出了第二个列表中不在第一个列表中的项目。请参阅:code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b
  • Sami,这里是:“char[]”不包含“CompareTo”的定义,并且找不到接受“char[]”类型的第一个参数的扩展方法“CompareTo”(您是否缺少 using 指令或程序集引用?)"

标签: c# arrays compare


【解决方案1】:

看看这个;

        char[] ar = { 'a', 'h', 'm', 'a', 'd' };
        char[] ay = { 'a', 'y', 'm', 'a', 'd' };
        List<char> matches = new List<char>();

        if (ar.SequenceEqual(ay))
        {
            Console.WriteLine("Success");
        }
        else
        {
            for (int i = 0; i < ar.Count(); i++)
            {
                if (ar[i] != ay[i])
                {
                    matches.Add(ay[i]);
                }
            }
            foreach (var matched in matches)
            {
                Console.WriteLine("Failure: " + matched);
            }
        }

【讨论】:

  • 效果很好。谢谢。我只想在输出中显示这两个数组之间的相似性百分比。例如,如果有 2 个字符不同并且数组包含 5 个字符,我想从程序中计算这些数组之间的相似度百分比。
【解决方案2】:

使用 except 方法,您可以非常简单地实现这一点,并且您不必两次比较数组。

char[] ar = { 'a', 'h', 'm', 'a', 'd' };
char[] ay = { 'a', 'y', 'm', 'a', 'd' };
var different = ar.Except(ay).ToList();
if (different.Count == 0)
{
         Console.WriteLine("Success");
}
else
{
         foreach (char c in different)
         {
               Console.WriteLine(c);
         }
}
Console.WriteLine("Percent of similarity: "+(100-different.Count*100/ar.Length) +"%");

【讨论】:

  • 谢谢!但在第 4 行,“different.Count == 0”不起作用。
  • 太棒了!是的,它现在确实有效。我想添加这两个数组之间的相似性百分比。因此,例如,如果不同字符的总数等于 2,并且数组是 5 个字符,则程序会计算百分比。你听懂了吗?
  • 是的,我可以轻松做到这一点,让我再更新一下答案
  • 我是stackoverflow的新用户,我不知道这个选项。但我现在做到了。
  • 没问题,你会习惯的
【解决方案3】:

试试这个选项,我还在数组中添加了一个额外的字符,只是为了检查失败:

using System;
using System.Linq;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            char[] ar = { 'a', 'h', 'm', 'a', 'd' };
            char[] ay = { 'a', 'y', 'f', 'm', 'a', 'd' };
            Console.WriteLine(GetDiffOfCharArray(ay, ar, "ay", "ar"));
            ay = new char[] { 'a', 'h', 'm', 'a', 'd' };
            Console.WriteLine(GetDiffOfCharArray(ay, ar, "ay", "ar"));
            Console.ReadLine();
        }

        private static string GetDiffOfCharArray(char[] array1Values, char[] array2Values, string array1Name, string array2Name)
        {
            string result = "";

            if (array1Values.SequenceEqual(array2Values))
            {
                result = string.Format("Success, Array '{0}' matches Array '{1}'", array1Name, array2Name);
            }
            else
            {
                var diff = array1Values.Except(array2Values);
                result = string.Format("Failure, the different char is '{0}', it is in the array '{1}' but not in the array '{2}'", 
                    string.Join("','", diff), 
                    array1Name, 
                    array1Name);
            }
            return result;
        }
    }
}

其中失败和成功的输出如下:

失败,不同的char是'y','f',它在数组'ay'中但不在数组'ay中

成功,数组 'ay' 匹配数组 'ar'

【讨论】:

  • 非常好。但它同时出现在输出的失败和成功消息中。
  • 那是因为我正在运行一个失败的示例和一个成功的示例
【解决方案4】:

Ayman,除了可以为你耍花招。这是代码。

IEnumerable<char> inArArray = ar.Except(ay);
foreach (char c in inArArray) {
             Console.WriteLine("{0} Exists in ar but not in ay",c);
}


IEnumerable<char> inAyrray = ay.Except(ar);
foreach (char c in inAyrray)
{
                Console.WriteLine("{0} Exists in ay but not in ar", c);
}

【讨论】:

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