Приведенный ниже код работает для сортировки двух столбцов (по фамилии, а затем по имени), однако мне нужно сортировать по переменному количеству имен (2-5 на запись). Добавление другого разделения ThenBy на пробел вызывает исключение за пределами границ. Я понимаю, почему, но мне было интересно, есть ли способ обойти это, чтобы заставить код работать с Linq, или мне нужно пойти по другому пути. Извините, если это просто, я совершенно новичок в С#. Я искал ответ некоторое время и не могу найти его.
Код ниже выводит на консоль:
Jimbo Crab
Jonathan Crab
Michael Crab
Steve Cruthers
Barry John
David Johnson
Правильно упорядочено сначала по фамилии, а затем по имени.
Однако имена, которые мне нужно отсортировать, имеют разную длину, то есть:
Барри Джон
Дэниел Джонсон Джеймс
Стив Дэвидсон Эндрю Колинз
Лорна Майкл
Что должно производить:
Steve Davidson Andrew Colins
Daniel Johnson James
Barry John
Lorna Michael
Их нужно отсортировать в обратном порядке, то есть по фамилии, затем по имени и, наконец, по имени.
Заранее спасибо!
var listStr = new[] {
"Barry John", "Steve Cruthers", "Michael Crab", "David Johnson", "Jonathan Crab", "Jimbo Crab"};
var sorted = listStr
.OrderBy(s => s.Split(' ')[1])
.ThenBy(s => s.Split(' ')[0]);
foreach (var s in sorted)
{
Console.WriteLine(s);
}
}
переменное количество имен (2-5 на запись) что означает? Можете ли вы рассказать нам больше, чтобы мы предоставили то, что вы ожидали от решения?
Может быть, это поможет: stackoverflow.com/questions/29171741/…





Проще и эффективнее разделить каждую строку один раз, а затем отсортировать с помощью массивов. Наконец, вы можете соединить массивы обратно со строками, если хотите.
var sorted = listStr
.Select(s => s.Split(' ')) // project string to an array
.OrderBy(a => a[a.Length - 1]) // order by last element
.ThenBy(a => a.Length > 2 ? a[1] : a[0]) // then order by middle element
.ThenBy(a => a[0]) // then order by first element
.Select(a => String.Join(" ", a)); // project back to a string
привет, Гойд, можешь добавить пример того, как могут выглядеть данные и какой результат ты ожидаешь? (минимальный воспроизводимый пример)