Array.concat
или Array.append
, согласно документации, выделите новый массив, а затем скопируйте содержимое двух начальных массивов в последующее.
List.append
сложность пропорциональна длине только первого аргумента.
Таким образом, использование списка теоретически должно быть более эффективным, поскольку конкатенация вашего последнего массива в любом случае будет иметь ту же сложность, что и финальный Array.of_list
операция.
правка: как упоминалось @coredump, сохранение дерева массивов, которое представляло бы логическую конкатенацию всех массивов, было бы более дешевыми структурами, и если в конце вам понадобится фактический массив,Затем вы можете вычислить общий размер вашего «абстрактного» массива, создать массив этого размера, а затем заполнить его содержимым дерева массива.Операция будет линейной по размеру конечного массива.
При этом я сомневаюсь, что в конце она будет иметь большое значение, если у вас не будет огромного выражения для компиляции.В этом случае вам также следует обратить внимание на тот факт, что List.append
не является хвостовой рекурсией и, следовательно, может привести к переполнению стека в (действительно) больших списках.