Arhn - архитектура программирования

OrderBy для сортировки 2D-массива в .NET C #

Что не так с этим кодом?

Я использую System.Linq

int[,] array = new int[3, 3] { { 1, 4, 2 },
                               { 4, 5, 1 },
                               { 7, 3, 8 } 
                             };

int[,] sortedByFirst = array.OrderBy(x => x[0]);
int[,] sortedBySecond = array.OrderBy(x => x[1]);
int[,] sortedByThird = array.OrderBy(x => x[2]);

Ошибка:

Вам не хватает директивы using или ссылки на сборку?

30.06.2017

  • Убедитесь, что вы используете пространство имен System.Linq 01.07.2017
  • Массив реализует не общий IEnumerable, поэтому вам нужно преобразовать его в IEnumerable<T> для использования OrderedBy 01.07.2017
  • @GeorgeAlexandria Что не сработает, потому что IEnumerable возвращает все значения int, а не подмассивы. И вы не можете просто преобразовать в IEnumerable<T>, вам придется использовать Cast<int>(). 01.07.2017
  • @juharr Да, я знаю, что он возвращает все элементы, и это не решает его проблему до конца. Это только помогает ему исправить ошибки компиляции. 01.07.2017

Ответы:


1

2D-массивы плохо работают с LINQ. Что вы ожидаете OrderBy получить и отсортировать, даже если бы это было реализовано в n-мерном массиве?

Намного лучше работать с List.

var src = new List<int[]> { new[] { 1, 4, 2 },
                  new[] { 4, 5, 1 },
                  new[] { 7, 3, 8 } 
                };

var sortedByFirst = src.OrderBy(x => x[0]).ToList();
var sortedBySecond = src.OrderBy(x => x[1]).ToList();
var sortedByThird = src.OrderBy(x => x[2]).ToList();
30.06.2017

2

2D-массивы не работают с OrderBy. Не стесняйтесь попробовать это:

 for (int i = 0; i < array.Length - 1; ++i)
                    {
                        for (int j = i; j < array.GetLength(0); ++j)
                        {
                           // for first column

                           int a = array[i,0]; // this way you can choose column whatever you want
                            int b = array[j,0];

                            if (a < b) 
                            {

                                for (int x = 0; x < array.GetLength(1); ++x)
                                {
                                    string temp = array[i, x];
                                    array[i, x] = array[j, x];
                                    array[j, x] = temp;
                                }
                            }

                        }
                    }
01.08.2018

3

Есть двусмысленность в том, чего вы пытаетесь достичь. Вы хотите, чтобы «строки сетки» синхронизировались друг с другом при сортировке по одному из «столбцов»? Или вы ожидаете, что значения из одного «столбца» будут возвращены по порядку, отдельно от других «столбцов»?

Если это первый, то я бы рекомендовал следовать этому из другого вопроса, похожего на этот, и используйте класс DataTable, чтобы ваши строки не перепутались.

Если второй, то можете просто заказать столбец через array[0].OrderBy(x=>x);

кстати, я думаю с твоим кодом ...

        int[,] ordered = array.OrderBy(x => x[0]).ToArray();

... что вы хотели использовать массив типов int[][], а не массив типов int[,]. OrderBy существует для другого, но он не делает того, чего вы ожидаете, я не думаю. Я только что попробовал и не могу понять, что он вообще делает.

Надеюсь это поможет!

30.06.2017
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..