adressmoeistranici
@adressmoeistranici
Начинающий программист

Как использовать метод Sort list'а содержащего экземпляры структуры?

Я использую лист экземпляров структуры, мне нужно отсортировать по возрастанию значения или по убыванию в листе используя метод sort, но незнаю как это сделать
сделал реализацию icomparer
public struct SheduleCell : IComparer
    {
        public string cell1;
        public int cell2;
        public SheduleCell(string param1, int param2)
        {
            cell1 = param1;
            cell2 = param2;
        }

        public int Compare(object x, object y)
        {
            SheduleCell sc1 = (SheduleCell)x, sc2 = (SheduleCell)y;
            return sc1.cell1.CompareTo(sc2.cell1);
        }
    }

как вызвать сорт теперь не могу понять
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Во первых нужно указать тип.
public struct SheduleCell : IComparable<SheduleCell>

Тогда простой list.Sort(); будет использовать метод public int CompareTo(SheduleCell sc)
Допустим у вас будет два метода прямая и обратная сортировка, то нужно это делать так:
Иметь метод
public static int ReversSort(SheduleCell sc1, SheduleCell sc2)
{
 return sc1.CompareTo(sc2) * (-1);
}

И вызывать list.Sort(SheduleCell.ReversSort);

Итого:
public struct SheduleCell : IComparable<SheduleCell>
    {
        public string cell1;
        public int cell2;
        public SheduleCell(string param1, int param2)
        {
            cell1 = param1;
            cell2 = param2;
        }

        public int CompareTo(SheduleCell sc)
        {
            return cell1.CompareTo(sc.cell1);
        }

        public static int ReversSort(SheduleCell sc1, SheduleCell sc2)
        {
            return sc1.CompareTo(sc2) * (-1);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {

            var list = new List<SheduleCell>();
            list.Add(new SheduleCell("X", 1000));
            list.Add(new SheduleCell("B", 50));
            list.Add(new SheduleCell("A", 100));
            list.Add(new SheduleCell("C", 10));

            list.Sort();
            list.Sort(SheduleCell.ReversSort);
        }
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
CSBI Санкт-Петербург
от 60 000 до 80 000 руб.
Кнопка Екатеринбург
До 100 000 руб.
Payment Systems Москва
от 160 000 до 200 000 руб.
15 авг. 2018, в 23:38
300 руб./за проект
15 авг. 2018, в 22:39
60000 руб./за проект
15 авг. 2018, в 21:18
30000 руб./за проект