Задать вопрос
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);
        }
    }

как вызвать сорт теперь не могу понять
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • OTUS
    C# Developer. Professional
    6 месяцев
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 1
    1 неделя
    Далее
  • Ulearn.me
    Основы программирования на примере C#. Часть 2
    1 неделя
    Далее
  • Ulearn.me
    Проектирование на языке C#
    1 неделя
    Далее
  • Software-testing.ru
    Программирование на C# для тестировщиков
    10 недель
    Далее
  • Нетология
    Разработчик игр на Unity
    13 месяцев
    Далее
  • OTUS
    C# Developer
    12 месяцев
    Далее
  • XYZ School
    Разработка игр на Unity
    5 месяцев
    Далее
Решения вопроса 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);
        }
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@kttotto
пофиг на чем писать
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы