2015-10-06 2 views
2

Я имею массив ввода определяется следующим образом:Принцип работы Array.sort()

string[] inputArray = { "a", "s", "d", "f", "g", "2", "3", "34", "4", "4", "y", "a", "f", "8", "h", "m" }; 

Когда я выполняю Сортировка через этот массив, я получаю выход как:

{"2","3","34","4","4","8","a","a","d","f","f","g","h","m","s","y"} 
  1. Почему цифры поступают до алфавитов?

  2. Array.Sort() ли выполняет сортировку по основам ASCII кода (ASCII код чисел ниже, чем буквы)?

  3. Как определяется порядок сортировки, если массив состоит из специальных символов и буквенно-цифровых символов?
+2

вниз голосование не имеет никакого смысла. его действительный вопрос для обсуждения – Suji

+0

Это тривиальный поиск: [MSDN] (https://msdn.microsoft.com/en-us/library/6tf1f0bc%28v=vs.110%29.aspx) –

ответ

3

Array.Sortuses the default comparer для сортировки. И что comparer будет сравнивать обе строки на основе текущей культуры (обратите внимание, что у компаратора есть механизм отказа, когда обе стороны являются строками). Это обычно сравнивает их на основе их символьного кода, а затем цифры поступают перед буквами.

+0

ASCII - это последний век , –

+0

@HenkHolterman вы правы. Обновлено, чтобы быть более точным. –

1

Строки сравниваются в так называемом лексикографическом порядке, что означает, что вы сравниваете два первых символа, а в случае равенства сравниваете следующие два и так далее. Если одна из строк заканчивается перед другой, она на первом месте.

Два символа действительно сравниваются по их числовому значению, обычно ASCII. В таблице ASCII сначала должны быть введены управляющие символы (непечатаемые), затем цифры, прописные буквы, строчные буквы и специальные символы между этими группами.

0

его логика основана на интерфейсе IComparable. и, таким образом, реализация по умолчанию, используемая методом сортировки, предпочитает номера алфавитам.

второй: его полностью основан на IComparable интерфейсе вы можете увидеть документы в here

Смежные вопросы