pufferfish
pufferfish

Reputation: 291

Default String Sort Order

Is the default sort order an implementation detail? or how is it that the Default Comparer is selected?

It reminds me of the advice. "Don't store HashCodes in the database"

Is the following Code guaranteed to sort the string in the same order?

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

Upvotes: 4

Views: 5274

Answers (5)

I wanted to post a reply related to cultural things while you sort your strings but Jon already added it:-(. Yes, I think you may take into acc the issue too because it is selected by default the alphabetical order, the random strings if existed as foreign besides English (i.e Spanish) will be placed after English after all, they appear in the same first letters though. That means you need a globalization namespace to deal with it.

By the way, Timothy, it is secret not secrete :D

Upvotes: 0

Kevin Holditch
Kevin Holditch

Reputation: 5303

If you do not specify a comparer then sort will use the default comparer which sorts alphabetically. So to answer your question yes that code will always return the strings in the same order.

There is an overload to the sort method that allows you to specify your own comparer if you wish to sort the data in a different order.

Upvotes: 1

Jon
Jon

Reputation: 437336

This overload of List<T>.Sort uses the default comparer for strings, which is implemented like this:

This method performs a word (case-sensitive and culture-sensitive) comparison using the current culture. For more information about word, string, and ordinal sorts, see System.Globalization.CompareOptions.

Upvotes: 1

Marc Gravell
Marc Gravell

Reputation: 1062660

Your code creates a new list copying from the array, sorts that list, and then discards it. It does not change the array at all.

try:

Array.Sort(randomStrings);

Upvotes: -1

SLaks
SLaks

Reputation: 887365

Strings are always sorted in alphabetical order.

The default (string.CompareTo()) uses the Unicode comparison rules of the current culture:

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

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

Upvotes: 5

Related Questions