2013-07-08 2 views
1

У меня есть два списка:Получение индекса списка из строки в другом списке

public static List<Dinosaur> Dinosaurs = new List<Dinosaur>(); 
public static List<DinosaurSpecies> DinosaurSpeciesList = new List<DinosaurSpecies>(); 

Я хочу использовать Виды в первом списке, чтобы найти ключ видов во втором списке. Следующий бросает «имеют некоторые недопустимые аргументы», но он иллюстрирует то, что я пытаюсь сделать:

int index = MainWindow.DinosaurSpeciesList.FindIndex(MainWindow.Dinosaurs[i].Specie); 

Другими словами, где делают виды в списке Dinosaurs [индекс] отображается в списке всех DinosaurSpecies?

+0

Почему вы не использовали структуру данных в виде карты или словаря? – NINCOMPOOP

+2

Также, вероятно, это не скомпилируется, если '.Specie' не является' Predicate '. –

+0

Ну, эти структуры списков используются по всей программе и до сих пор хорошо работают. Я уверен, что есть простое решение; вероятно, только мой синтаксис. – zetar

ответ

3

Вы можете сделать это путем передачи predicate к FindIndex метода:

int index = MainWindow.DinosaurSpeciesList.FindIndex(x => x.Specie == MainWindow.Dinosaurs[i].Specie); 

В принципе, вы говорите: Найти индекс элемента WHOS Specie свойства равно указанному Dinosaur.Specie собственности


Упрощенный и более понятный пример может быть:

Dinosaur dinosaur = GetDinosaurToFindSpeciesInformationFor(); 
int index = DinosaurSpeciesList.FindIndex(x => x.Specie == dinosaur.Specie); 

Конечно, если вы потом планируете использовать только индекс, чтобы получить DinosaurSpecies объект в любом случае, вы можете сделать это:

DinosaurSpecies species = DinosaurSpeciesList.SingleOrDefault(x => x.Specie == dinosaur.Specie); 
//NOTE: species will be null if there are no matches, or more than one match 
+0

Спасибо за объяснение! Кроме того, я «гарантирован» никогда не имел ни одного или более одного совпадения, потому что, когда создается «отдельный» динозавр, он получает свой «вид» из DinosaurSpeciesList. Теперь я хочу использовать это как индекс, чтобы вытаскивать другие данные из DinosaurSpeciesList (например, сколько пищи ему нужно есть каждый день/KG). – zetar

+0

@zetar: Только что проверил ваш блог, я думаю, что это фантастическая идея и пожелать удачи вам и вашей команде во время разработки. Я с нетерпением ожидаю увидеть готовый продукт! – musefan

+1

'FindIndex' не является методом LINQ; единственным методом LINQ, используемым в этом ответе, является «SingleOrDefault». – Servy

2

Ваши параметры в FindIndex неверны. Форма одного параметра требует лямбда (или более конкретно, Predicate<T>):

int index = MainWindow.DinosaurSpeciesList.FindIndex(x => x.Specie.Equals(MainWindow.Dinosaurs[i].Specie)); 

В зависимости от того, что ваш DinosaurSpecies класс выглядит, конечно.

пс. Мне нравятся динозавры

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