Сортировка 2D-массива

Простейшие вопросы в области инженерной разработки
Ответить
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Сортировка 2D-массива

Сообщение GT21 »

Снова нужна ваша мысль.
Нужно придумать, как сделать сортировку двумерного массива по столбцам. Принцип такой: сортируем строки по первому столбцу, если несколько ячеек первого столбца имеют одинаковые значения, то эти строки сортируем по второму столбцу. Если и во вторых столбцах этих строк есть одинаковые значения, то сортируем по третьему. И т.д. Все данные строчные, но разных типов (буквы/цифры и т.д.). Это схоже с сортировкой по дате в формате гггг-мм-дд: Сначала идут одного года, которые отсортированы по месяцам, каждый из которых отсортирован по дням

Пример:
a 2 54
b 23 6
b 1 a
b 1 78
a 1 13
a 2 f

Сначала выводим все строки с "а", потом все строки с "b". Затем сортируем строки внутри "a": сначала с цифрой 1, потом с цифрой 2. Аналогично с третьим столбцом

должно получиться:
a 1 13
a 2 54
a 2 f
b 1 78
b 1 a
b 23 6

Т.е. полная сортировка по всем столбцам. Кстати, количество ячеек в строках может быть разным
LabVIEW 8.6
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Сортировка 2D-массива

Сообщение AlexanderKonoval »

Не претендую на оптимальность, набросал со скуки что первое в голову пришло.
sort2DstringArrayEx.png
колдооооовствооооо! (С)
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Сортировка 2D-массива

Сообщение IvanLis »

GT21 писал(а):Т.е. полная сортировка по всем столбцам.
Конечно с множеством ограничений и допущений (например, когда если в одной ячейке будут сразу и цифры и буквы или в ячейках одного столбца будет разное количество букв), но для конкретного примера работает
Res.png
Sort2D-StringArray.png
Sort2D-StringArray.vi
lv2010
(17.57 КБ) 97 скачиваний
Sort2D-StringArray.vi
lv8.0 save from 2010
(14.87 КБ) 79 скачиваний
Если вечером будет время попробую через рекурсию сделать.
GT21 писал(а):Кстати, количество ячеек в строках может быть разным
Здесь Вы конечно погорячились, :labview: так не может, да и не массив это вовсе получится :crazy:

Но готов отказаться от своих слов, если приведете мне конкретные примеры и языки программирования, где подобное возможно :thank: .
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Сортировка 2D-массива

Сообщение IvanLis »

AlexanderKonoval писал(а):Не претендую на оптимальность, набросал со скуки что первое в голову пришло.
sort2DstringArrayEx.png
sort2DstringArrayEx.png (9.31 КБ) 3734 просмотра
Так не проканает, т.к. при сортировке String, "2" будет идти после "15", а "5" после "30".
8.png
8.png (9.44 КБ) 3734 просмотра
Раньше даже Windows файлы сортировал как String, это потом научился нормально сортировку по имени делать.
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Сортировка 2D-массива

Сообщение Blackman »

А вот так проканает? :)
Вложения
Sort 2D Array BD.PNG
Sort 2D Array FP.PNG
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Сортировка 2D-массива

Сообщение IvanLis »

Blackman писал(а):А вот так проканает? :)
От этого не избавились:
IvanLis писал(а):при сортировке String, "2" будет идти после "15", а "5" после "30"
Пример автор не очень удачный привел.
вот:
45.png
45.png (11.34 КБ) 3726 просмотров
Да и размер кластера при использовании функции Array To Cluster программно (на сколько мне известно) нельзя задать, только вручную. Можно конечно задать сразу с запасом, но это "костыль", который может "выстрелить".
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: Сортировка 2D-массива

Сообщение Blackman »

Да и размер кластера при использовании функции Array To Cluster программно (на сколько мне известно) нельзя задать, только вручную. Можно конечно задать сразу с запасом, но это "костыль", который может "выстрелить".
Для этого и был создан OpenG LabVIEW Data Tools, который позволяет не вспоминать о подобных "костылях" :)
На закуску пример сортировки 2х-мерного массива строк с использованием преобразования одномерного массива строк неограниченного размера (гипербола) в вариант-кластер.
Вложения
Insertion Sort 2D Array Strings--1D Array Strinds to VCluster BD
Insertion Sort 2D Array Strings--1D Array Strinds to VCluster BD
Insertion Sort 2D Array Strings--1D Array Strinds to VCluster FP
Insertion Sort 2D Array Strings--1D Array Strinds to VCluster FP
1D Array Strinds to VCluster FP
1D Array Strinds to VCluster FP
GT21
user
user
Сообщения: 74
Зарегистрирован: 29 апр 2016, 09:22
Версия LabVIEW: 8.6
Благодарил (а): 1 раз
Поблагодарили: 1 раз
Контактная информация:

Re: Сортировка 2D-массива

Сообщение GT21 »

IvanLis писал(а):
GT21 писал(а):Т.е. полная сортировка по всем столбцам.
Здесь Вы конечно погорячились, :labview: так не может, да и не массив это вовсе получится :crazy:
Не совсем точно написал, не отсутствуют, а пустые. Например, в первой строке одна ячейка с данными и три пустые, а во второй все четыре ячейки - с данными

И дополню: в каждой ячейке данные только одной категории (слово/число/точка)
Blackman писал(а):
Да и размер кластера при использовании функции Array To Cluster программно (на сколько мне известно) нельзя задать, только вручную. Можно конечно задать сразу с запасом, но это "костыль", который может "выстрелить".
Для этого и был создан OpenG LabVIEW Data Tools, который позволяет не вспоминать о подобных "костылях" :)
На закуску пример сортировки 2х-мерного массива строк с использованием преобразования одномерного массива строк неограниченного размера (гипербола) в вариант-кластер.
К сожалению OpenG нет и установить его нет возможности. Да и, честно говоря, я не знаю, что это и как с этим работать
IvanLis писал(а):
GT21 писал(а):Т.е. полная сортировка по всем столбцам.
Конечно с множеством ограничений и допущений (например, когда если в одной ячейке будут сразу и цифры и буквы или в ячейках одного столбца будет разное количество букв), но для конкретного примера работает
кажется ваш пример отлично работает :super:
Последний раз редактировалось GT21 02 ноя 2016, 09:05, всего редактировалось 3 раза.
LabVIEW 8.6
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5463
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 87 раз

Re: Сортировка 2D-массива

Сообщение IvanLis »

GT21 писал(а):Не совсем точно написал, не отсутствуют, а пустые. Например, в первой строке одна ячейка с данными и три пустые, а во второй все четыре ячейки - с данными

И дополню: в каждой ячейке данные только одной категории (слово/число/точка)
Пустая ячейка будет стоять на первом месте после сортировки.

Поиграйтесь с доступными примерами, будут проблемы пишите.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Для чайников»