#c#
Вопрос:
Я создал простой класс, представляющий проект:
class Player
{
public string Name { get; set; }
public string Surname { get; set; }
public DateTime BirthDate { get; set; }
public double Height { get; set; }
public string Position { get; set; }
}
Теперь у меня есть их список. Мне нужен список объектов (игроков) с самыми новыми датами (самые молодые игроки) , чем есть несколько игроков с точно такой же датой рождения. Как мне это сделать?
Комментарии:
1. Сгруппировать по
BirthDate
, отсортировать, захватить первый элемент (группу)?2. @David Группа по или по заказу?
3. @Duston: Сначала один, потом другой. (Какой из них первый, может даже не иметь значения.)
Ответ №1:
Я решил вашу проблему, используя немного примитивный метод.
Я генерирую случайные объекты
public List<Player> Players = new List<Player>
{
new Player(){ Name="elcin", BirthDate = DateTime.Now.AddDays(-234)},
new Player(){ Name="kazim", BirthDate = DateTime.Now.AddDays(-4)},
new Player(){ Name="emin", BirthDate = DateTime.Now.AddDays(-34)},
new Player(){ Name="sasa", BirthDate = DateTime.Now.AddDays(-234)},
new Player(){ Name="dada", BirthDate = DateTime.Now.AddDays(-44444)},
new Player(){ Name="fafa", BirthDate = DateTime.Now.AddDays(-42)},
new Player(){ Name="gaga", BirthDate = DateTime.Now.AddDays(-24)},
new Player(){ Name="xaxa", BirthDate = DateTime.Now.AddDays(-2234)},
new Player(){ Name="caca", BirthDate = DateTime.Now.AddDays(-124)},
};
Затем я создал объект с именем сортированный для перечисленных игроков.
List<Player> sorted = new List<Player>();
Я отсортировал список рекурсивным методом.
public void SortedList(List<Player> players)
{
Player player = new Player();
DateTime minDate = DateTime.Now;
foreach(var item in players)
{
if(minDate>item.BirthDate)
{
minDate = item.BirthDate;
player = item;
}
}
players.Remove(player);
sorted.Add(player);
if (players.Count!=0)
{
SortedList(players);
}
}
Чтобы кратко просмотреть его, я отправляю объект списка в SortedList
метод и получаю свой объект, указанный в sorted
объекте за пределами метода.
Буду признателен, если вы его нашли. полезный
Ответ №2:
Самый простой способ решить эту проблему-сгруппировать коллекцию по дню рождения, чем брать группу с последней датой и сглаживать эту группу.
listOfPlayers.GroupBy(e => e.BirthDate)
.OrderByDescending(e => e.Key)
.Take(1)
.SelectMany(e => e)
.ToList();