Вы говорите, что вы сортировку чисел, но ваш список содержит строки. Сортировка числовых значений в строках приведет ко всем видам странных результатов, если числа имеют различное количество цифр.
Это как раз проблема с образцом, который вы дали в своем комментарии. Сортировка строки сравнивает первый символ (цифру) и видит, что 1 < 2, поэтому сортирует 12 до 2. Если вы начали с "2", "12", "7"
, вы увидите, что он дает тот же результат - "12", "2", "7"
.
Если вы сохраняете числовые значения, используйте числовой тип для своего списка.
Также Sort()
всегда будет сортировать в порядке возрастания. Если вы хотите, чтобы он производил нисходящий результат, вам нужно было либо получить Reverse()
результат, либо, как говорили другие ответы, используйте OrderByDescending(x => x)
вместо Sort()
. Последний вариант будет более эффективным.
Update
Я беру это из вашего комментария на @ ответ Стива, что тип данных в базе данных является символ типа, а?
Для вашего текстового поля вы можете сделать что-то вроде:
string[] lines = text.Split(Environment.NewLine, StringSplitOptions.RemoveEmptyEntries);
List<int> trans = lines.Select(line => Int32.Parse(line)).ToList();
Второй строка взорвется, если записи не являются чисто численными, хотя.Более безопасным способом было бы что-то вроде этого:
IEnumerable<int?> values = lines.Select(line =>
{
int value;
return Int32.TryParse(line, out value) ? (int?)value : null;
})
List<int> trans = values.Where(v => v.HasValue).Select(v => v.Value).ToList();
Это сбросит все строки, которые не могут быть преобразованы к int
.
После того, как вы получили свои данные в цифровом формате, сохраните его в базе данных таким образом, а остальная часть вашей обработки (сортировка и т. Д.) Станет намного проще.
Update 2
Как я уже сказал в своем комментарии, метод OrderByDescending()
не изменяет список он применяется, но по существу представляет собой иной порядок перечисления по этому списку. Если вам нужны результаты в списке, просто добавьте ToList()
, чтобы сделать это. Итак:
List<int> sortedTrans = transInt.OrderByDescending(x => x).ToList();
, что является результатом, когда вы звоните 'sort'? –
Сортировка не работает корректно, если вы не сделаете свой список или не переопределите свой вид, чтобы использовать его как int. –
Botonomous
Если они цифры, зачем конвертировать в строку? – melancia