在C#中比较两个字符串数组

Wes*_*eld 49 .net c# linq string 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"};
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以将这些字符串相互比较而不用在C#中循环它们,这样只有a和c会产生布尔值true?换句话说,所有元素必须相等,并且数组必须是相同的大小?同样,如果可能的话,不使用循环.

Ahm*_*IEM 81

你可以使用Linq:

bool areEqual = a.SequenceEqual(b);
Run Code Online (Sandbox Code Playgroud)

  • 当两个数组具有完全相同的值但顺序不同时返回false. (11认同)
  • @WesField:注意这个方法也循环,只是因为你的需求是_"没有循环"_.当然,如果没有循环,就不可能比较多个项目.另请注意,它默认使用默认比较器,适用于值类型和.NET类型.对于自定义引用类型,您需要为[`SequenceEqual`](http://msdn.microsoft.com/en-us/library/bb342073.aspx)创建自定义`IEqualityComparer <T>`和/或覆盖`Equals`和`GetHashCode`. (8认同)

Dar*_*ren 15

尝试使用Enumerable.SequenceEqual:

var equal = Enumerable.SequenceEqual(a, b);
Run Code Online (Sandbox Code Playgroud)

  • @WesField:没有区别.扩展方法只是静态类中的静态方法.因此,您可以将其视为常规静态方法(此答案),或者将其用作扩展方法(Ahmed的答案). (3认同)
  • 同样的事情 - 使用扩展方法语法的,另一个是显式使用扩展方法.有关详细信息,请参阅扩展方法sig http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx (2认同)

Man*_*her 5

如果你想获得与另一个数组不同的数组数据,你可以尝试 .Except

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

string[] DifferArray = array1.Except(array2).ToArray();
Run Code Online (Sandbox Code Playgroud)

输出: {"bb","cc"}