4

默认排序顺序是实现细节吗?或者如何选择默认比较器?

它让我想起了这个建议。“不要在数据库中存储 HashCodes”

以下代码是否保证以相同的顺序对字符串进行排序?

string[] randomStrings = { "Hello", "There", "World", "The", "Secrete", "To", "Life", };
randomStrings.ToList().Sort();
4

5 回答 5

5

字符串始终按字母顺序排序。

默认 ( string.CompareTo()) 使用当前文化的 Unicode 比较规则:

    public int CompareTo(String strB) {
        if (strB==null) { 
            return 1;
        } 

        return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
    } 
于 2013-01-25T15:56:38.377 回答
1

此重载List<T>.Sort使用字符串的默认比较器,其实现方式如下

此方法使用当前区域性执行单词(区分大小写和区域性)比较。有关单词、字符串和序数排序的更多信息,请参阅System.Globalization.CompareOptions

于 2013-01-25T15:57:48.887 回答
1

如果您未指定比较器,则 sort 将使用按字母顺序排序的默认比较器。因此,要回答您的问题,是的,代码将始终以相同的顺序返回字符串。

sort 方法有一个重载,如果您希望以不同的顺序对数据进行排序,则允许您指定自己的比较器。

于 2013-01-25T15:58:49.527 回答
0

您的代码从数组复制创建一个新列表,对该列表进行排序,然后将其丢弃。它根本不会改变数组。

尝试:

Array.Sort(randomStrings);
于 2013-01-25T15:56:41.483 回答
0

我想在您对字符串进行排序时发布与文化相关的回复,但 Jon 已经添加了它:-(。是的,我认为您也可能会考虑 acc 这个问题,因为默认情况下它是按字母顺序选择的,如果是随机字符串除了英语(即西班牙语)之外,作为外语存在,毕竟会放在英语之后,但它们出现在相同的第一个字母中。这意味着你需要一个全球化的命名空间来处理它。

顺便说一句,蒂莫西,这是秘密而不是秘密:D

于 2013-01-25T16:08:13.753 回答