如何生成一个逆等效字符串键?(得到降序排序)



假设您有一个int键,当显示并与其他键一起排序时,当然将按照自然数顺序排序。

因此,要获得"逆",您可以编程…

int InverseSortKey = Int32.MaxValue - ArbitraryIntKey;

问题是:如何得到一个类似的"逆"值,但字符串?

的例子:

string InverseSortKey = "ZZZZZZZZZ" - ArbirtraryStringKey; // Of course this don't compile.

我希望你能明白。

朴素的解决方案(更新-如果您知道所有字符串的最大长度)

String data;
StringBuilder resultBuilder = new StringBuilder(maxLength);
for (int i = 0; i < maxLength; i++)
{
    Char  c = i < data.length ? data[i] : 0;
    resultBuilder.Append(Char.MaxValue - c);
}
String result = resultBuilder.ToString();

没有考虑到字符串排序可能因区域性而异的事实,并且不一定匹配字符的数值。完整的解决方案将按排序顺序获取所有字符有效字符序列(在这些字符串的特定预期编码中)的有序列表,然后为每个字符选择与之相反的字符。

进一步的免责声明:不要使用此解决方案,除非您可以假设字符串是单字节编码并按数字顺序精确排序。

最新更新