2015-12-16 4 views
0

У меня есть два общих списка, список целых чисел и список строк. Я изменяю порядок целых чисел по убыванию. Как изменить порядок списка строк в соответствии с порядком списка целых чисел?Изменить порядок в списке по другому списку

Я попытался код ниже в csharppad.com, но он не работает:

List<int> numbers = new List<int>(new int[]{0,1,2,3}); 
List<string> letters = new List<string>(new string[]{"a","b","c","d"}); 

List<int> numbersOrdered = new List<int>(); 
List<string> lettersOrdered = new List<string>(); 

numbersOrdered = numbers.OrderByDescending(i => i).ToList(); 
ner 
lettersOrdered = letters.Select(i => numbers[i]).ToList(); 

for(int i = 0; i < lettersOrdered.Count; i++) 
    Console.Write(lettersOrdered[i]); 

Он возвратил ошибку: «Аргумент 1: Не удается преобразовать из„строка“до„межд“

+2

Что вы подразумеваете под _doesn't work_ точно? Сообщение об ошибке компилятора или исключение? Неожиданный результат? Пожалуйста, уточните вашу проблему. Прочитайте [FAQ] и [ask] –

+0

Извините, я включил возвращенное сообщение об ошибке. – Bayu

ответ

0

Вам нужно сначала создать список sortIndex, то есть список, содержащий индексы, отсортированные по некоторым критериям. Затем вы можете использовать его для переупорядочения обоих списков, подобных этому

var sortIndex = Enumerable.Range(0, numbers.Count) 
    .OrderByDescending(i => numbers[i]) 
    .ToList(); 

var numbersOrdered = sortIndex.Select(i => numbers[i]).ToList(); 
var lettersOrdered = sortIndex.Select(i => letters[i]).ToList(); 
+0

Спасибо, это работает. – Bayu

0

Вы не выбираете индекс, но сам элемент Вам нужно выбрать как:.

lettersOrdered = letters.Select((letter, i) => letters[numbers[i]]).ToList(); 

линии

lettersOrdered = letters.Select(i => numbers[i]).ToList(); 

следует сообщить об ошибке, поскольку i является string, а не int.

+0

Он по-прежнему возвращает ошибку: «CS0029: не может неявно преобразовать тип« System.Collections.Generic.List 'в' System.Collections.Generic.List '" – Bayu

+0

@Bayu Я пропустил небольшой шаг. Теперь это исправлено. –

+0

Спасибо за помощь. Иван Стоев дал правильное решение. – Bayu