2012-07-02 3 views
1

У меня есть элемент списка,Список форумов Поиск

List<string> xmlValue = new List<string>(); 

В этом у меня есть товар {"English","Spanish","French","Hindi","English","English"} мне нужно искать все английский пункт вместе с Index(item index). Я написал ниже код, который возвращает индекс только для 1 элемента. Как получить индекс для следующего элемента.

string search = "English"; 
    int index = xmlValue.Select((item, i) => new { Item = item, Index = i }) 
    .First(x => x.Item == search).Index; 
+0

Где вы хотите, чтобы индексы сохранялись? В переменной 'int'' index' вы можете хранить только один индекс за раз. –

ответ

4
List<string> xmlValue = new List<string>() 
       {"English", "Spanish", "French", "Hindi", "English", "English"}; 

string search = "English"; 

int[] result = xmlValue.Select((b, i) => b.Equals(search) ? i : -1) 
         .Where(i => i != -1).ToArray(); 
+0

Спасибо Nikhil, это был быстрый ответ. – Pat

+0

@MahmoudGamal: Я не уверен, что он хочет только первых * двух * индексов. Обратите внимание на то, как он не использует единую множественную форму во всем своем вопросе, даже там, где это необходимо. Поэтому я предполагаю, что он ищет индексы всех следующих предметов, а не только одного следующего пункта. –

1

Я выбрал бы против использования методов расширения LINQ в этом случае и использовать «старомодный» цикл:

string search = "English"; 

var foundIndices = new List<int>(xmlValue.Count); 
for (int i = 0; i < xmlValue.Count; i++) { 
    if (xmlValue[i] == search) { 
     foundIndices.Add(i); 
    } 
} 

Это просто более удобным для чтения, как это, на мой взгляд; Кроме того, список foundIndices никогда не содержит никаких нежелательных значений.

+0

Я бы поспорил о читаемости. – Reniuz

+0

@Reniuz: Вопрос о вкусе. Этот цикл IMO четко показывает, что нужно искать и что добавлено, в то время как с выражениями labmda необходимо выполнить некоторые трюки с недопустимыми индексами, которые позже будут отфильтрованы. Короче не всегда лучше :-) –

+0

Который имеет лучшую производительность – Pat

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