Сортировать список объектов по свойствам c # - PullRequest
6 голосов
/ 15 марта 2012

У меня есть этот класс:

public class Leg
{
    public int Day { get; set; }
    public int Hour { get; set; }
    public int Min { get; set; }
}

У меня есть функция, которая получает список ног, называемый GetLegs ()

List<Leg> legs = GetLegs();

Теперь я хотел бы отсортировать этот список. Итак, сначала я должен рассмотреть день, затем час и, наконец, минуту. Как мне решить эту сортировку?

Спасибо

Ответы [ 5 ]

10 голосов
/ 15 марта 2012

Может быть, что-то вроде этого:

List<Leg> legs = GetLegs()
                .OrderBy(o=>o.Day)
                .ThenBy(o=>o.Hour)
                .ThenBy(o=>o.Min).ToList();
1 голос
/ 15 марта 2012

Вы можете написать пользовательский IComparer<Leg> и передать его методу List<T>.Sort.

В качестве альтернативы, вы можете реализовать IComparable<Leg> в своем классе и просто вызвать List<T>.Sort.

0 голосов
/ 15 марта 2012

Вам необходимо реализовать интерфейс IComparable<T> в своем классе, чтобы обеспечить более интуитивный способ сортировки объектов на языке C #. Когда класс реализует IComparable, вы также должны реализовать public method CompareTo(T).

Класс

Leg реализует IComparable<Leg>, что означает, что экземпляр Leg можно сравнить с другими экземплярами Leg.

    #region "Leg Class that implements IComparable interface"
    public class Leg:IComparable<Leg>
    {
        public int Day { get; set; }
        public int Hour { get; set; }
        public int Min { get; set; }

        public int CompareTo(Leg leg)
        {
            if (this.Day == leg.Day)
            {
                if (this.Hour == leg.Hour)
                {
                    return this.Min.CompareTo(leg.Min);
                }
            }
            return this.Day.CompareTo(leg.Day);
        }
    }
    #endregion


   //Main code
   List<Leg> legs = GetLegs();
   legs.Sort();
0 голосов
/ 15 марта 2012

Полагаю, это поможет.

var o = legs.OrderBy(x => x.Day)
            .ThenBy(x => x.Hour)
            .ThenBy(x => x.Min);
0 голосов
/ 15 марта 2012

Использовать Enumerable.OrderBy Метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...