2012-03-21

Naturalny porządek sortowania

Przez tytułowe hasło możemy rozumieć naprawdę wiele rzeczy. Ale problem głównie związany jest prawidłowym posortowaniem tekstu zawierającego liczby. Inaczej w naszym tekście ciągi liczb chcielibyśmy zastąpić jakby pojedynczym symbolem o wartości liczby. I tutaj możemy się zastanawiać jakie liczby jak wyodrębniać.

Głównym zadaniem sortowania jest radzenie sobie z prawidłowym sortowaniem string-ów z jakąś numeracją, kiedy te numery nie są uzupełniane zerami na początku (np. pliki).

Alternatywnie możemy skorzystać z gotowej metody, takiej samej jaką używa system do sortowania plików. Jest już napisana, przetestowana, użytkownik nie zostanie specjalnie zaskoczony działaniem sortowania innym od systemowego zwłaszcza jeśli idzie o nazwy plików. I być może przy okazji odpadają nam problemy z lokalizacją, które musielibyśmy uwzględnić pisząc taką metodę sami.

Sam kod jest bardzo prosty:

internal class NaturalOrderStringComparer : IComparer<string>
{
    [DllImport("shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
    private static extern int StrCmpLogicalW(String a_x, String a_y);

    public int Compare(string a_x, string a_y)
    {
        return StrCmpLogicalW(a_x, a_y);
    }
}

Brak komentarzy:

Prześlij komentarz