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);
        }
    }

как вызвать сорт теперь не могу понять
  • Вопрос задан
  • 207 просмотров
Решения вопроса 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
пофиг на чем писать
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы