2016-02-07 4 views
-2

Я хотел бы отсортировать массив символов в соответствии с их порядковыми позициями (кодовыми точками) в таблице Unicode.Любая ссылка, подтверждающая, что Array.Sort (charArray, StringComparer.Ordinal) работает?

Я вижу, что следующий код работает:

char[] charArray = new[] { 'h', 'e', 'l', 'l', 'o' }; 
Array.Sort(charArray, StringComparer.Ordinal); 

Но это выглядит немного странно. Во-первых, потому что оба эти параметра являются неэквивалентными, а во-вторых, здесь я использую StringComparer для сравнения символов.

Гарантировано, что это работает? Любая ссылка?

+2

'StringComparer' в данном примере просто сравнивает сравнение с' IComparable.CompareTo' ([источник] (http://referencesource.microsoft.com/#mscorlib/system/stringcomparer.cs,91)). Вы также можете использовать сопоставление по умолчанию. – PetSerAl

+0

@PetSerAl ничего себе, что плохо разработан API. StringComparer должен * fail * при вызове с нестрочными. – usr

+2

Итак, я думаю, ответ таков: это работает, но не делайте этого. – usr

ответ

2

OrderBy(chr => chr) делает трюк. char - IComparable, и это сопоставимое определение сравнивает целочисленное/"порядковое" значение символов.