WEB开发网
开发学院软件开发C语言 总结字符串比较函数 阅读

总结字符串比较函数

 2010-09-30 22:39:16 来源:WEB开发网   
核心提示: 查看原图(大图)一个内部比较字符串的非托管方法,而方法的具体内容,总结字符串比较函数(3),我无从而知,但是可以明确的是,提高了很大效率呢?因此,我在这里建议,这一定是一个高效的比较算法,因此

查看原图(大图)

一个内部比较字符串的非托管方法,而方法的具体内容,我无从而知,但是可以明确的是,这一定是一个高效的比较算法。

因此,当我们每次SubString的时候,当我们ToLower的时候,我们不妨都在这里使用String.Compare,是不是为我们节省了很多空间,提高了很大效率呢?

因此,我在这里建议,如果可能,我们尽可能地使用String.Compare方法来代替CompareTo方法!

2. 被遗忘的CompareOrdinal让我们先来看下CompareOrdinal的源码:

private static unsafe int CompareOrdinalHelper(string strA, string strB) 
{ 
  int num = Math.Min(strA.Length, strB.Length); 
  int num2 = -1; 
  fixed (char* chRef = &strA.m_firstChar) 
  { 
    fixed (char* chRef2 = &strB.m_firstChar) 
    { 
      char* chPtr = chRef; 
      char* chPtr2 = chRef2; 
      while (num >= 10) 
      { 
        if (*(((int*)chPtr)) != *(((int*)chPtr2))) 
        { 
          num2 = 0; 
          break; 
        } 
        if (*(((int*)(chPtr + 2))) != *(((int*)(chPtr2 + 2)))) 
        { 
          num2 = 2; 
          break; 
        } 
        if (*(((int*)(chPtr + 4))) != *(((int*)(chPtr2 + 4)))) 
        { 
          num2 = 4; 
          break; 
        } 
        if (*(((int*)(chPtr + 6))) != *(((int*)(chPtr2 + 6)))) 
        { 
          num2 = 6; 
          break; 
        } 
        if (*(((int*)(chPtr + 8))) != *(((int*)(chPtr2 + 8)))) 
        { 
          num2 = 8; 
          break; 
        } 
        chPtr += 10; 
        chPtr2 += 10; 
        num -= 10; 
      } 
      if (num2 == -1) 
      { 
        goto Label_00F1; 
      } 
      chPtr += num2; 
      chPtr2 += num2; 
      int num3 = chPtr[0] - chPtr2[0]; 
      if (num3 != 0) 
      { 
        return num3; 
      } 
      return (chPtr[1] - chPtr2[1]); 
    Label_00D7: 
      if (*(((int*)chPtr)) != *(((int*)chPtr2))) 
      { 
        goto Label_00F5; 
      } 
      chPtr += 2; 
      chPtr2 += 2; 
      num -= 2; 
    Label_00F1: 
      if (num > 0) 
      { 
        goto Label_00D7; 
      } 
    Label_00F5: 
      if (num > 0) 
      { 
        int num4 = chPtr[0] - chPtr2[0]; 
        if (num4 != 0) 
        { 
          return num4; 
        } 
        return (chPtr[1] - chPtr2[1]); 
      } 
      return (strA.Length - strB.Length); 
    } 
  } 
}

上一页  1 2 3 4  下一页

Tags:总结 字符串 比较

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接