Задать вопрос
@OrdUs

Как отсортировать список из массивов?

Дан список List, при этом все массивы внутри списка состоят из двух элементов. Я хочу отсортировать список так, чтобы меньший индекс имел массив с меньшим значением первого элемента, а при выборе из двух массивов с совпадающими первыми элементами — массив с меньшим вторым элементом. Как это наиболее эффективно сделать?
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
lasalas
@lasalas
.NET Architect
list = list.OrderBy(x => x[0]).ThenBy(x => x[1]).ToList();
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Зависит от возможных значений чисел. Если числа не очень большие, то RadixSort будет самым быстрым вариантом. В противном случае самая обычная стандартная сортировка будет достаточно быстрая. Просто надо как-то ей передать функцию сравнения двух массивов, которая смотрит на первый элемент, а потом на второй. Что-то вроде a[0] < b[0] || (a[0] == b[0] && a[1] < b[1]). Не специалист по C#, но возможно массивы уже так и сравниваются там.
Ответ написан
Комментировать
@cicatrix
было бы большой ошибкой думать
Создай сравиватель для сортировки:
class ArrayComparer : IComparer<int[]>
{
    public int Compare(int[] x, int[] y)
    {
        if (x is null || y is null) throw new ArgumentNullException();
        if (x.Length < 2 || y.Length < 2) throw new ArgumentException("Сравниваемые массивы должны иметь минимум 2 элемента");
        int comparisonResult = x[0].CompareTo(y[0]);
        if (comparisonResult == 0) comparisonResult = x[1].CompareTo(y[1]);
        return comparisonResult;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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