Вывести индексы топ 3 игроков по уровню используя LINQ
Я хочу из этого листа получить индексы топ 3 игроков с наибольшим уровнем, используя Linq. Если можно, то наиболее простой способ, я только начал изучать LINQ. Спасибо:)
class Program
{
static void Main(string[] args)
{
List<Player> players = new List<Player>()
{
new Player("Ян", 19),
new Player("Владимир", 25),
new Player("Дмитрий", 14),
new Player("Леонид", 42),
new Player("Виктория", 72), //index 4
new Player("Елена", 55),
new Player("Евгений", 55),
new Player("Михаил", 45),
new Player("Роман", 75), // index 8
new Player("Николай", 85), //index 9
new Player("Александр", 15),
new Player("Петр", 25),
};
}
}
class Player
{
public string Name { get; private set; }
public int Level { get; private set; }
public Player(string name, int level)
{
Name = name;
Level = level;
}
}
Ответ будет таков: индексы 9 8 4
Ответы (1 шт):
Автор решения: VladD
→ Ссылка
Самый простой метод, видимо, такой:
var bestIndices =
players.Select((p, idx) => (p.Level, idx)) // преобразуем данные: нам нужны пары
// из уровня и индекса
.OrderByDescending(pair => pair.Level) // сортируем по убыванию уровня
.Select(pair => pair.idx) // убираем уровень из данных,
// оставляем только индексы
.Take(3); // берём 3 верхних
Но скорее всего вам не должны быть нужны индексы, а только сами элементы. В этом случае ваш код будет выглядеть так:
var best = players.OrderByDescending(p => p.Level).Take(3);