Как эффективно объединить несколько массивов в Ruby?
Я просто хотел объединить несколько массивов в Ruby и не мог найти удовлетворительный способ сделать это.
Пример ввода:
foo = [1, 2, 3]
bar = [4, 5, 6]
baz = [7, 8, 9]
Ожидаемый результат: (без изменения существующих массивов)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Мои настоящие массивымного больше, поэтому я заинтересован в эффективном решении. Также может быть более трех массивов, поэтому предпочтителен короткий синтаксис.
Что я пробовал до сих порfoo + bar + baz
является очевидным, это сжато и ясно. Но это оценивается как(foo + bar) + baz
, Другими словами: он создает промежуточный массив[1, 2, 3, 4, 5, 6]
это выбрасывается после всей операции. Как отмечено вдокументация:
повторное использование+=
на массивах может быть довольно неэффективным
[*foo, *bar, *baz]
в основном содержит элементы, которые тоже не очень эффективны для больших массивов. Это также больше похоже на хак для меня.
[foo, bar, baz].flatten(1)
кажется, даже хуже, чем выше, с точки зрения производительности.
[].concat(foo).concat(bar).concat(baz)
является самым быстрым, но выглядит громоздким и требует нескольких вызовов методов.
Разве не должно быть простого метода класса для такой основной задачи? Что-то вроде:
Array.concat(foo, bar, baz)
Я что-то упускаю из виду?