С той же пузырьковой сортировкой можно, только не нужно соединять два измерения в одно. Проверку делать по одному измерению, а менять местами в обеих измерениях.
Есть и еще способ. Для строкового измерения сделать строковый массив, а двухмерный массив с делать типа инт, в первом измерении числа по которым выполняется сортировка, а во втором индексы массива со строками. В этом случае можно использовать ArraySort().
Есть и еще способ. Для строкового измерения сделать строковый массив, а двухмерный массив с делать типа инт, в первом измерении числа по которым выполняется сортировка, а во втором индексы массива со строками. В этом случае можно использовать ArraySort().
К сожалению прокатит только в МТ4, т.к. ArraySort() в МТ5 работает только с одномерными массивами.
В пятницу 22 мая 2015 года будет опубликовано обновление платформы MetaTrader 5. Обновление содержит следующие изменения:
MetaTrader 5 Client Terminal build 1150
19. MQL5: Функции сортировки и поиска в массиве ArraySort, ArrayBsearch, ArrayMinimum и ArrayMaximum теперь
работают и с многомерными массивами. Сортировка и поиск происходят
только по первому (нулевому) индексу массива. Ранее эти функции работали
только с одномерными массивами.
Я бы решил так: каждая строка представляет собой некий объект CObject, а вся таблица: CArrayObj. В своем классе наследнике CObject перегрузите метод Compare. Вот накидал полностью рабочую демонстрацию в виде скрипта:
Смотрим вывод:
Всем привет! НЕ могу сообразить как дописать представленный тут класс для сортировки таблицы более 2 столбцов. 1 столбец string, последующие столбцы данные типа double
Sergey Gritsay: Всем привет! НЕ могу сообразить как дописать представленный тут класс для сортировки таблицы более 2 столбцов. 1 столбец string, последующие столбцы данные типа double
Нужно в CLineTable добавить дополнительные поля double, а также расширить типы сортировки в методе Compare.
Да, именно так и имел ввиду. Но вообще предложенный способ к сожалению не универсальный. При изменении размерности таблицы или типов ее колонок, приходится перекраивать класс CLineTable. Думаю есть способ лучше. Можно создать универсальную сортировку произвольных таблиц, содержащих произвольное количество типов данных и колонок.
Vasiliy Sokolov: Да, именно так и имел ввиду. Но вообще предложенный способ к сожалению не универсальный. При изменении размерности таблицы или типов ее колонок, приходится перекраивать класс CLineTable. Думаю есть способ лучше. Можно создать универсальную сортировку произвольных таблиц, содержащих произвольное количество типов данных и колонок.
для моей задачи, достаточно этой реализации, а так да не плохо было бы иметь более универсальный класс сортировки таблиц.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
С той же пузырьковой сортировкой можно, только не нужно соединять два измерения в одно. Проверку делать по одному измерению, а менять местами в обеих измерениях.
Есть и еще способ. Для строкового измерения сделать строковый массив, а двухмерный массив с делать типа инт, в первом измерении числа по которым выполняется сортировка, а во втором индексы массива со строками. В этом случае можно использовать ArraySort().
Есть и еще способ. Для строкового измерения сделать строковый массив, а двухмерный массив с делать типа инт, в первом измерении числа по которым выполняется сортировка, а во втором индексы массива со строками. В этом случае можно использовать ArraySort().
К сожалению прокатит только в МТ4, т.к. ArraySort() в МТ5 работает только с одномерными массивами.
К сожалению прокатит только в МТ4, т.к. ArraySort() в МТ5 работает только с одномерными массивами.
ArraySort в МТ5 работает с многомерными массивами. Отсутствует только MODE_DESCEND.
Да всё верно:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Список изменений в билдах MetaTrader 5 Client Terminal
MetaQuotes Software Corp., 2015.05.20 17:16
В пятницу 22 мая 2015 года будет опубликовано обновление платформы MetaTrader 5. Обновление содержит следующие изменения:
MetaTrader 5 Client Terminal build 1150
19. MQL5: Функции сортировки и поиска в массиве ArraySort, ArrayBsearch, ArrayMinimum и ArrayMaximum теперь работают и с многомерными массивами. Сортировка и поиск происходят только по первому (нулевому) индексу массива. Ранее эти функции работали только с одномерными массивами.А когда обсуждали - ещё не умела :)
Я бы решил так: каждая строка представляет собой некий объект CObject, а вся таблица: CArrayObj. В своем классе наследнике CObject перегрузите метод Compare. Вот накидал полностью рабочую демонстрацию в виде скрипта:
Смотрим вывод:
Всем привет! НЕ могу сообразить как дописать представленный тут класс для сортировки таблицы более 2 столбцов. 1 столбец string, последующие столбцы данные типа double
Нужно в CLineTable добавить дополнительные поля double, а также расширить типы сортировки в методе Compare.
я уже сообразил, все заработало, вот так написал
я уже сообразил, все заработало, вот так написал
Да, именно так и имел ввиду. Но вообще предложенный способ к сожалению не универсальный. При изменении размерности таблицы или типов ее колонок, приходится перекраивать класс CLineTable. Думаю есть способ лучше. Можно создать универсальную сортировку произвольных таблиц, содержащих произвольное количество типов данных и колонок.
Не совсем вкурил, прошу прощения с ООП не очень дружу
Во первых спасибо за примеры, особенно последний, только не понял, вот есть таблица с кучей столбиков,
Table.Sort(SORT_BY_NUMBER); я так пониял отсортирует эту таблицу по номерам в 2-3-4 колонке - последовательно от 2 к 4-ой
а как сделать что бы можно было сортировать по к примеру 3-ей колонке отдельно или по 4-ой - без учета остальных номерных
это надо отдельный SORT_BY_NUMBER2 к примеру что ли делать по примеру этих ?