如何比较两个char[]数组是否相同?

4

现在,我有两个char数组,foo1[]foo2[]。当我将它们转换为字符串并输出到控制台时,它们都显示为bar。我知道我可以像这样做:

int g;
for (int i=0;i<length.foo1;i++) {      // loop from 0 to length of array
    if (foo1[i]=foo2[i]) {             // if foo1[0] and foo2[0] are the same char
    g++;                               // increment a counter by 1
}
else                                   // otherwise...
{
    i=100;                             // set i to something that will halt the loop
}
if (g = length.foo1) {                 // if the incremented counter = length of array
    return true;                       // arrays are equal, since g only increments
}                                      // in the case of a match, g can ONLY equal the
else {                                 // array length if ALL chars match
    return false;                      // and if not true, false.

要逐个字符比较它们,但我猜想有更简单的方法。有趣的是,我大部分搜索“在c#中比较char[]相等”的结果都是关于比较STRING数组,或者在某些情况下比较字符串或字符数组的一部分是否匹配...我找不到任何关于测试char数组是否相等的简便方法。逐个遍历每个数组是最好的方法吗?还是有某种方法可以比较foo1=foo2或foo1==foo2?对我来说,两种方法都不起作用。
基本上,我需要测试char foo1[]char foo2[]是否都为{B,A,R}

3
你所说的等价性是什么类型的?你如何处理文化比较?或者你只对序数等价性感兴趣?请注意,这显然不是你实际的C#代码,因为在C#中<>是无效的,而且你试图增加一个未初始化的变量。噢,然后你的if语句没有布尔条件。这段代码真正要做什么并不是很清楚... - Jon Skeet
我来澄清一下问题...当我说“我可以做类似这样的事情”时...我没有明确说明它是伪代码。我也不知道你所说的“文化比较”是什么意思,所以我不确定我是否需要担心它。 - dwwilson66
考虑“ss”和“ß”(Eszett)。如果您正在执行与文化相关的比较,则根据您使用的文化,这些字符可能被视为相等或不相等。 - Jon Skeet
啊...明白了,关于文化敏感性的问题。在这个练习中,cafe并不等于café,tschuss也并不等于tschuß,所以处理文化语言差异不会成为问题...在某些情况下,知道cafe和café不相等将是期望的结果。 - dwwilson66
5个回答

22

你可能正在寻找:

foo2.SequenceEqual(foo1)

4

我认为你可以使用 SequenceEquals 来比较数组,虽然先检查两个长度的性能更好。


1
foo1.ToList().Intersect(foo2.ToList())

0
你可以编写一个函数,它比先将char[]转换为字符串再比较两个字符串更快。 1. 首先比较数组的长度,如果它们不相等,则返回false。 2. 开始循环并比较每个字符,如果发现任何差异则返回false,否则在循环后返回true。
if(foo1.Length != foo2.Length){ return false;}
for(int i=0;i<foo1.Length;i++){
   if(foo1[i] != foo2[i]){ return false;}
}
return true;

-1
string s = new string(foo1);
string t = new string(foo2);

int c = string.Compare(s, t);
if(c==0){
    //its equal
}

这个工作得非常好。谢谢。我希望有类似的东西可以直接用于字符数组,但看起来并没有。 - dwwilson66
9
这展示了如何比较字符串,而非 char[] - nathansizemore
笑,你不是认真的吧。 - Dima
5
我来这里学习如何比较两个字符数组,而无需分配两个字符串的内存空间 :( - Marcus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接