比较大字符串内容

本文关键字:字符串 比较 | 更新日期: 2023-09-27 18:27:45

我正在实现一个系统,在该系统中我处理多种复杂类型的数据,并且我必须能够使用IComparable接口契约对给定内部值的数据对象进行排序。

其中一种对象类型处理短到超长(2*10^28)字符串,具体化为TextReader。

有人知道在这么长的物体上以最佳方式计算这种差异的有效方法吗?我似乎找不到任何解决方案来确定两个对象之间哪个最大或相等,但只有文本差异算法。

比较大字符串内容

由于它们被具体化为TextReaders,我可能会使用这样的方法:

static int Compare(TextReader r1, TextReader r2)
{
     int c1 = 0, c2 = 0;
     // read one char at a time and compare them
     // until we reach end of one of the strings
     while((c1 = r1.Read()) != -1 && 
           (c2 = r2.Read()) != -1)
     {
          var result = ((char)c1).CompareTo((char)c2);
          if (result != 0) return result;
     }
     // if both are -1 then strings have the same length and 
     // consist of same chars so they are equal
     if (c1 == -1 && c2 == -1)
         return 0;
     // if r1 is subset of r2 then r2 is greater
     else if (c1 == -1)
         return -1;
     // otherwise r1 is greater
     else
         return 1;
}