Помогите объединить несколько массивов в один.

 

Не получается сделать красиво, да и не красиво тоже не получается.


Есть n-ное количество массивов отсортированных по возрастанию, не так чтоб сильно-сильно много, но всё таки дофига.

Нужно получить один массив отсортированный по возрастанию без повторений значений элементов массивов.

int aaa[] = {0, 2, 3, 12, 13, 25};
int sss[] = {14, 15, 26, 48};
int ddd[] = {0, 1, 2, 3, 12, 15, 16, 25, 32};

// нужно получить такой
int result[] = {0, 1, 2, 3, 12, 13, 14, 15, 16, 25, 32, 48};
 

1. Собираем всё в новый массив последовательно

2. Сортируем функцией ArraySort

3. Проходимся по массиву с проверкой соседних элементов для исключения повторов, а проверенные числа сохраняем с отдельным счётчиком в этот же массив

4. Изменяем размер массива согласно счётчику

 
Aleksandr Slavskii:

Не получается сделать красиво, да и не красиво тоже не получается.


Есть n-ное количество массивов отсортированных по возрастанию, не так чтоб сильно-сильно много, но всё таки дофига.

Нужно получить один массив отсортированный по возрастанию без повторений значений элементов массивов.

Вставляй

ArrayInsert

Сортируй

ArraySort
 

Evgeniy Zhdan #:

Aliaksandr Hryshyn #:

К сожалению не выйдет, так как массивов не так чтоб сильно-сильно много, но всё таки дофига и размерчик у них тоже не по пять элементов.

В общем общее количество элементов массива может оказаться больше чем максимально разрешённое.

Из справки:

Общее число элементов в массиве не может превышать 2147483647

 
Aleksandr Slavskii #:

К сожалению не выйдет, так как массивов не так чтоб сильно-сильно много, но всё таки дофига и размерчик у них тоже не по пять элементов.

В общем общее количество элементов массива может оказаться больше чем максимально разрешённое.

Из справки:

Общее число элементов в массиве не может превышать 2147483647

Поменяйте тип массива на uint и допустимый размер удвоится.

 
Alexey Viktorov #:

Поменяйте тип массива на uint и допустимый размер удвоится.

Это я для примера привёл, они у меня вообще double

Да и как смена типа массива, сможет изменить ограничение на количество элементов массива?

 
Aleksandr Slavskii #:

К сожалению не выйдет, так как массивов не так чтоб сильно-сильно много, но всё таки дофига и размерчик у них тоже не по пять элементов.

В общем общее количество элементов массива может оказаться больше чем максимально разрешённое.

Из справки:

Общее число элементов в массиве не может превышать 2147483647

Пробуйте матрицы, разработчики говорили, что там такого ограничения нету

 
Alexey Viktorov #:

Поменяйте тип массива на uint и допустимый размер удвоится.

Не удвоится :)

 
Aleksandr Slavskii #:

Это я для примера привёл, они у меня вообще double

Да и как смена типа массива, сможет изменить ограничение на количество элементов массива?

int #

Целый тип int имеет размер 4 байта (32 бита). Минимальное значение -2 147 483 648, максимальное значение 2 147 483 647.

uint #

Беззнаковый целый тип uint занимает в памяти 4 байта и позволяет выражать целочисленные значения от 0 до 4 294 967 295.


А тип double ещё больше. А где вы прочли о таком ограничении?

Aliaksandr Hryshyn #:

Не удвоится :)

Почему?

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Типы char, short, int и long - Целые типы - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:

А тип double ещё больше. А где вы прочли о таком ограничении?

Почему?

ArrayResize

Общее число элементов в массиве не может превышать 2147483647.

 
Aleksandr Slavskii #:
ArrayResize

Общее число элементов в массиве не может превышать 2147483647.

Да, я понял свою ошибку. Индекс массива имеет тип int и соответственно не может быть больше  2147483647

Причина обращения: