默认排序顺序是实现细节吗?或者如何选择默认比较器?
它让我想起了这个建议。“不要在数据库中存储 HashCodes”
以下代码是否保证以相同的顺序对字符串进行排序?
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
使用字符串的默认比较器,其实现方式如下:
此方法使用当前区域性执行单词(区分大小写和区域性)比较。有关单词、字符串和序数排序的更多信息,请参阅
System.Globalization.CompareOptions
。
如果您未指定比较器,则 sort 将使用按字母顺序排序的默认比较器。因此,要回答您的问题,是的,代码将始终以相同的顺序返回字符串。
sort 方法有一个重载,如果您希望以不同的顺序对数据进行排序,则允许您指定自己的比较器。
您的代码从数组复制创建一个新列表,对该列表进行排序,然后将其丢弃。它根本不会改变数组。
尝试:
Array.Sort(randomStrings);
我想在您对字符串进行排序时发布与文化相关的回复,但 Jon 已经添加了它:-(。是的,我认为您也可能会考虑 acc 这个问题,因为默认情况下它是按字母顺序选择的,如果是随机字符串除了英语(即西班牙语)之外,作为外语存在,毕竟会放在英语之后,但它们出现在相同的第一个字母中。这意味着你需要一个全球化的命名空间来处理它。
顺便说一句,蒂莫西,这是秘密而不是秘密:D