2013-05-11 46 views
3

现在,我有两个char阵列,foo1[]foo2[]。当我将它们转换为字符串并输出到控制台时,它们两个都显示为bar。我知道我可以做这样的事情:如何比较两个char []数组的等价性?

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. 

受信比较他们的信,但我猜有一个更简单的方法。有趣的是,我为comparing char[] for eqivalency c#和类似关键字所做的大多数搜索结果都是关于比较STRING数组,或者比较字符串或字符数组,当数组的某部分匹配某个或另一个时,会导致大量的搜索结果...我无法找到任何关于测试char数组的简单方法是平等的。是逐步通过每个阵列的最佳方式?或者有一些方法可以比较foo1 = foo2或foo1 == foo2吗?这些都不适合我。

基本上,我需要测试,如果char foo1[]char foo2[]都是{B,A,R}

+3

你在说什么等价的?你想如何处理文化比较?或者你只对*序数*等价性感兴趣?请注意,这显然不是您实际的C#代码,因为'<>'在C#中无效,并且您试图增加一个未初始化的变量。哦,然后你的'if'语句没有布尔条件。真的不清楚那个代码*是做什么的...... – 2013-05-11 14:12:28

+0

我会澄清这个问题......当我说“我可以做这样的事情”......我没有说明这是伪代码 - ISH。我也不知道“文化比较”一词的含义,所以我不确定是否需要担心。 – dwwilson66 2013-05-12 02:02:30

+0

考虑“ss”和“ß”([Eszett](http://en.wikipedia.org/wiki/%C3%9F))。如果您正在进行文化敏感的比较,则根据您使用的文化,这些比较可能会被视为平等或不平等。 – 2013-05-12 06:45:59

回答

2
string s = new string(foo1); 
string t = new string(foo2); 

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

这工作出色。谢谢。我希望有这样的直接使用char数组,但它看起来不是。 – dwwilson66 2013-05-12 02:13:49

+0

然后接受答案,如果它帮助你:) – Dima 2013-05-12 06:20:34

+4

这演示了如何比较字符串,而不是'char []'。 – nathansizemore 2016-07-27 16:09:50

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

您可能正在查询:

foo2.SequenceEqual(foo1) 
3

我想你可以使用SequenceEquals比较数组,尽管首先检查两个长度都有更好的性能。