默认字符串排序顺序

时间:2013-01-25 15:54:22

标签: c# .net

默认排序顺序是实现细节吗?或者如何选择Default Comparer?

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

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

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

5 个答案:

答案 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