C # LINQ найти, где имя находится в списке - PullRequest
0 голосов
/ 10 мая 2011

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

например, допустим, у меня есть:

List<Location> Locations= new List<Location>();

и я хочу отсортировать по популярности

var list = this.Locations.OrderBy(r => r.PopularityPct); 

Теперь я хочу выяснить, каков индекс "Испания" ( ПРИМЕЧАНИЕ : "Испания" будет поиском свойства Имя , где Имя будет свойством объекта местоположения) теперь, когда этот список отсортирован по популярности.

Какой самый простой способ сделать это?

Ответы [ 3 ]

5 голосов
/ 10 мая 2011

Вы можете легко получить все имен и индексов, например:

var list = this.Locations.OrderBy(r => r.PopularityPct)
                         .Select((value, index) => new { value, index });

Затем, например:

var spainIndex = list.Single(x => x.value.Name == "Spain").index;

Или распечатать все:

foreach (var pair in list)
{
    Console.WriteLine("{0}: {1}", pair.index, pair.value.Name);
}

Предполагается, что вы хотите постсортированный ранг.Если вы хотите индекс в списке initial , вы должны изменить порядок:

var list = this.Locations.Select((value, index) => new { value, index });
                         .OrderBy(r => r.value.PopularityPct);
0 голосов
/ 10 мая 2011

Вы можете сделать что-то вроде ниже:

public static int FindIndexOf(IEnumerable<Location> items,string val)
{
    int index = -1;
    items.Where((x, i) => {
                var ret = x.City == val;
                if (ret)
                    index = i;
                return ret;
            }).ToList();
    return index;
}

Я знаю, что это странно:)

0 голосов
/ 10 мая 2011

Сначала сортируйте местоположения, затем ...

from index in Enumerable.Range(0, Locations.Count)
let r = Locations[index]
..WHERE CLAUSE
select index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...