C# 比较C语言中的两个字符串数组#
假设我们有5个字符串数组: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才能生成
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();