默认字符串排序顺序

4

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

我想起了一个建议:“不要在数据库中存储哈希码”。

以下代码保证以相同顺序排序字符串吗?

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

请查看以下网址:http://msdn.microsoft.com/zh-cn/library/3da4abas.aspx - cheesemacfly
5个回答

5

字符串总是按字母顺序排序。

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

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

        return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
    } 

1
这个List<T>.Sort的重载使用默认的字符串比较器default comparer,其实现方式如下所示

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


1
如果您没有指定比较器,那么sort将使用默认的按字母顺序排序的比较器。因此,回答您的问题,是的,该代码将始终以相同的顺序返回字符串。
sort方法有一个重载,允许您指定自己的比较器,如果您希望按不同的顺序对数据进行排序。

只要调用线程的文化不变,就保证了相同的顺序。 - Erik Burigo
1
@ErikBurigo 是的,那是真的,我应该在我的帖子中提到。 - Kevin Holditch

0

我想在你整理字符串的时候发表一个与文化相关的回复,但是Jon已经添加了它:-(。是的,我认为你也可以考虑这个问题,因为默认情况下选择按字母顺序排列,如果存在除英语(例如西班牙语)以外的随机字符串,则会在所有英语之后放置,尽管它们出现在相同的首字母中。这意味着你需要一个全球化命名空间来处理它。

顺便说一句,Timothy,应该是secret而不是secrete :D


-1

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

尝试:

Array.Sort(randomStrings);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接