首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写更清晰的比较

如何编写更清晰的比较
EN

Stack Overflow用户
提问于 2011-07-27 16:05:23
回答 3查看 92关注 0票数 0

嗨,我不熟悉算法,所以我寻求帮助来做这个简单的比较。所以我有两个大小为N的无符号整型数组,我需要比较哪一个更大。我比较的方法是从左边的元素开始,如果Ai大于Bi,那么A array.if >B array.if它们是相等的,我比较Ai+1和Bi+1,一个强有力的方法是:

代码语言:javascript
运行
复制
BOOL checkArray(int[] A, int[] B) {
    for(i=0; i< N; i ++){ 
       if (A[i] > B[i]) {
           return TRUE;
       }else if (A[i] == B[i]) {
           continue;
       } else {  \\ A[i] < B[i]
           return FALSE;
       }
    }
}

请告知是否有更好的方法来实现这一点。非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-27 16:10:06

看看标准库的strcmp实现。

代码语言:javascript
运行
复制
bool checkArray (int [] a, int [] b)
{
  int
     i = 0;

  while (i < N && a [i] == b [i])
  {
    ++i;
  }

  return i < N && a [i] > b [i]; // return false if arrays equal
  //return i >= N || a [i] > b [i]; // return true if arrays equal
}

然而,您的示例代码有一个未定义的函数路由-即A的所有元素都等于B的所有元素。

票数 1
EN

Stack Overflow用户

发布于 2011-07-27 16:08:46

这是一种非常正常和有效的方式:)没有比这更好的方式了。

如果所有元素都相等,请确保正确返回。

票数 1
EN

Stack Overflow用户

发布于 2011-07-27 16:25:16

基本上没问题,但是为了遵循.NET比较模式,你应该返回一个整数。这样,如果您需要的话,也可以直接使用它进行排序

我会像这样实现它:

代码语言:javascript
运行
复制
public class StringArrayComparer : IComparer<String[]>
{
    #region IComparer<string[]> Members

    public int Compare(string[] x, string[] y)
    {
        if (x.Length != y.Length)
            throw new ArgumentException("The two arrays dont have same size");

        for (int i = 0; i < x.Length; i++)
        {
            int strComp = x[i].CompareTo(y[i]);
            if (strComp != 0)
                return strComp;
        }
        return 0;
    }

    #endregion
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6841214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档