默认排序顺序是一种实现细节吗?或者说是如何选择默认比较器的?
我想起了一个建议:“不要在数据库中存储哈希码”。
以下代码保证以相同顺序排序字符串吗?
string[] randomStrings = { "Hello", "There", "World", "The", "Secrete", "To", "Life", };
randomStrings.ToList().Sort();
默认排序顺序是一种实现细节吗?或者说是如何选择默认比较器的?
我想起了一个建议:“不要在数据库中存储哈希码”。
以下代码保证以相同顺序排序字符串吗?
string[] randomStrings = { "Hello", "There", "World", "The", "Secrete", "To", "Life", };
randomStrings.ToList().Sort();
字符串总是按字母顺序排序。
默认情况下 (string.CompareTo()
) 使用当前文化的 Unicode 比较规则:
public int CompareTo(String strB) {
if (strB==null) {
return 1;
}
return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
}
List<T>.Sort
的重载使用默认的字符串比较器default comparer,其实现方式如下所示:
此方法使用当前区域性进行单词(区分大小写和区域性)比较。有关单词、字符串和序数排序的详细信息,请参见
System.Globalization.CompareOptions
。
我想在你整理字符串的时候发表一个与文化相关的回复,但是Jon已经添加了它:-(。是的,我认为你也可以考虑这个问题,因为默认情况下选择按字母顺序排列,如果存在除英语(例如西班牙语)以外的随机字符串,则会在所有英语之后放置,尽管它们出现在相同的首字母中。这意味着你需要一个全球化命名空间来处理它。
顺便说一句,Timothy,应该是secret而不是secrete :D
你的代码从数组中创建一个新列表,对该列表进行排序,然后将其丢弃。它不会改变数组。
尝试:
Array.Sort(randomStrings);