默认排序顺序是实现细节吗?或者如何选择Default Comparer?
它让我想起了这个建议。 “不要将HashCodes存储在数据库中”
以下代码是否保证按相同的顺序对字符串进行排序?
string[] randomStrings = { "Hello", "There", "World", "The", "Secrete", "To", "Life", };
randomStrings.ToList().Sort();
答案 0 :(得分:3)
字符串始终按字母顺序排序。
默认值(string.CompareTo()
)使用当前文化的Unicode比较规则:
public int CompareTo(String strB) {
if (strB==null) {
return 1;
}
return CultureInfo.CurrentCulture.CompareInfo.Compare(this, strB, 0);
}
答案 1 :(得分:1)
此List<T>.Sort
的重叠使用default comparer表示字符串,已实现like this:
此方法执行一个单词(区分大小写且对文化敏感) 使用当前文化进行比较。有关单词的更多信息, 字符串和序数排序,请参阅
System.Globalization.CompareOptions
。
答案 2 :(得分:1)
如果未指定比较器,则sort将使用按字母顺序排序的默认比较器。所以回答你的问题是,代码将始终以相同的顺序返回字符串。
如果您希望以不同的顺序对数据进行排序,那么sort方法会有一个重载,允许您指定自己的比较器。
答案 3 :(得分:0)
您的代码会创建一个从数组中复制的新列表,对该列表进行排序,然后将其丢弃。它根本不会改变数组。
尝试:
Array.Sort(randomStrings);
答案 4 :(得分:0)
我想在你排序字符串的同时发布与文化事物有关的回复,但是Jon已经添加了它:-(是的,我认为你也可以考虑到这个问题,因为它默认是按字母顺序选择的,随机字符串如果除了英语(即西班牙语)以外存在,将放在英语之后,但它们出现在相同的第一个字母中。这意味着你需要一个全球化命名空间来处理它。
顺便提一下,提摩太,秘密而不是分泌:D