C# 比较C语言中的两个字符串数组#

C# 比较C语言中的两个字符串数组#,c#,.net,string,linq,equality,C#,.net,String,Linq,Equality,假设我们有5个字符串数组: string[] a = {"The","Big", "Ant"}; string[] b = {"Big","Ant","Ran"}; string[] c = {"The","Big","Ant"}; string[] d = {"No","Ants","Here"}; string[] e = {"The", "Big", "Ant", "Ran", "Too", "Far"}; 有没有一种方法可以将这些字符串相互比较,而不在C#中循环,这样只有a和C才能生成

假设我们有5个字符串数组:

string[] a = {"The","Big", "Ant"};
string[] b = {"Big","Ant","Ran"};
string[] c = {"The","Big","Ant"};
string[] d = {"No","Ants","Here"};
string[] e = {"The", "Big", "Ant", "Ran", "Too", "Far"};
有没有一种方法可以将这些字符串相互比较,而不在C#中循环,这样只有a和C才能生成布尔值true?换句话说,所有元素必须相等,数组的大小必须相同?同样,如果可能,不使用循环。

您可以使用Linq:

bool areEqual = a.SequenceEqual(b);
尝试使用:


如果您想一次比较它们:

string[] a = { "The", "Big", "Ant" };
string[] b = { "Big", "Ant", "Ran" };
string[] c = { "The", "Big", "Ant" };
string[] d = { "No", "Ants", "Here" };
string[] e = { "The", "Big", "Ant", "Ran", "Too", "Far" };

// Add the strings to an IEnumerable (just used List<T> here)
var strings = new List<string[]> { a, b, c, d, e };

// Find all string arrays which match the sequence in a list of string arrays
// that doesn't contain the original string array (by ref)
var eq = strings.Where(toCheck => 
                            strings.Where(x => x != toCheck)
                            .Any(y => y.SequenceEqual(toCheck))
                      );
string[]a={“The”,“Big”,“Ant”};
字符串[]b={“大”,“蚂蚁”,“跑”};
字符串[]c={“The”,“Big”,“Ant”};
字符串[]d={“No”,“Ants”,“Here”};
字符串[]e={“The”,“Big”,“Ant”,“Ran”,“Too”,“Far”};
//将字符串添加到IEnumerable(此处仅使用列表)
var strings=新列表{a,b,c,d,e};
//在字符串数组列表中查找与序列匹配的所有字符串数组
//不包含原始字符串数组(按ref)
var eq=字符串。其中(toCheck=>
字符串。其中(x=>x!=toCheck)
.Any(y=>y.SequenceEqual(toCheck))
);

返回两个匹配项(我想您可能会将其展开以排除已匹配的项)

如果要获取与另一个数组不同的数组数据,可以尝试。除了

string[] array1 = { "aa", "bb", "cc" };
string[] array2 = { "aa" };

string[] DifferArray = array1.Except(array2).ToArray();
输出:
{“bb”,“cc”}

您可以使用string.Join简化比较,您可以使用Linq摆脱循环,但在引擎盖下您仍然在循环-您尝试不使用循环是有原因的吗?看起来像是重复的,也是一个很好的答案。你能解释一下这和Linq a.SequenceEqual(b)之间的区别吗?同样的事情——一个使用扩展方法语法,另一个显式使用扩展方法。请看扩展方法sig,了解详情@WesField:没有区别。扩展方法只是静态类中的静态方法。因此,您可以将其视为一个普通的静态方法(此答案)或将其用作扩展方法(Ahmed的答案)。@WesField:注意,此方法也会循环,只是因为您的需求是“无循环的”。当然,不循环就不可能比较多个项目。还请注意,默认情况下它使用默认比较器,该比较器适用于值类型和.NET类型。对于自定义引用类型,您需要为和/或覆盖
Equals
GetHashCode
@TimSchmelter创建一个自定义
IEqualityComparer
,是的,我知道一个循环正在幕后执行,我只是想要一些整洁美观的东西,没有弄脏的空间。当两个数组的值完全相同但顺序不同时返回false。当需要构造表达式时,“无循环”非常方便。这就是我最后为Mock所做的。它来自Moq库。谢谢,这次可能不会使用它,但它是一个漂亮的选项。
string[]a=newstring[]{“1”、“2”、“2”};字符串[]b=新字符串[]{“1”,“2”};字符串[]DifferArray=a.Except(b).ToArray()DifferArray.Length;//这是个坏案子
        if (a.Length == d.Length)
        {
            var result = a.Except(d).ToArray();
            if (result.Count() == 0)
            {
                Console.WriteLine("OK");
            }
            else
            {
                Console.WriteLine("NO");
            }
        }
        else
        {
            Console.WriteLine("NO");
        }
string[] array1 = { "aa", "bb", "cc" };
string[] array2 = { "aa" };

string[] DifferArray = array1.Except(array2).ToArray();