【问题标题】:How do I Compare two char[] arrays for equivalency?如何比较两个 char[] 数组的等效性?
【发布时间】:2013-05-06 01:28:08
【问题描述】:

现在,我有两个 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.

逐个字母比较,但我猜有更简单的方法。有趣的是,我为comparing char[] for eqivalency c# 和类似关键字所做的大部分谷歌搜索都会导致关于比较字符串数组或比较字符串或字符数组的信息一团糟……当数组的一部分匹配某些东西时……我没有能够找到任何关于测试 char 数组是否相等的简单方法。遍历每个数组是最好的方法吗?或者有什么方法可以比较 foo1=foo2 还是 foo1==foo2?这些都不适合我。

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

【问题讨论】:

  • 你在说什么等价?你想如何处理文化比较?还是您只对 ordinal 等价感兴趣?请注意,这显然不是您的实际 C# 代码,因为 &lt;&gt; 在 C# 中无效,并且您正在尝试增加未初始化的变量。哦,然后您的 if 语句没有布尔条件。目前还不清楚该代码是什么意思......
  • 我会澄清这个问题......当我说“我可以做这样的事情”时......我没有澄清这是伪代码。我也不知道你所说的“文化比较”是什么意思,所以我不确定我是否需要担心。
  • 考虑“ss”和“ß”(Eszett)。如果您正在执行文化敏感比较,则可能会被视为相等或不相等,具体取决于您使用的文化。
  • 啊...了解文化敏感性。就本练习而言,cafe 不等于café,而 tschuss 不等于 tschuß,因此处理文化语言差异不会成为问题……在某些情况下,需要知道cafe 和cafe 解决不等于结果。

标签: c# arrays compare


【解决方案1】:

您可能正在寻找:

foo2.SequenceEqual(foo1)

【讨论】:

    【解决方案2】:

    我认为您可以使用SequenceEquals 来比较数组,即使首先检查两个长度具有更好的性能。

    【讨论】:

      【解决方案3】:
      foo1.ToList().Intersect(foo2.ToList())
      

      【讨论】:

        【解决方案4】:

        你可以制作一个你自己的函数,它会比首先将 char[] 转换为字符串然后比较两个字符串更快。 1.首先比较数组的长度,如果不相等则返回false。 2.开始循环,比较每个字符,如果发现有差异则返回false else循环后返回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;
        

        【讨论】:

          【解决方案5】:
          string s = new string(foo1);
          string t = new string(foo2);
          
          int c = string.Compare(s, t);
          if(c==0){
              //its equal
          }
          

          【讨论】:

          • 这非常有效。谢谢。我希望有这样的东西可以直接在 char 数组上使用,但看起来没有。
          • 这演示了如何比较字符串,而不是char[]
          • 大声笑,你不是认真的你
          • 我来这里是为了学习如何比较两个char数组而不必分配两个字符串:(
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多