Подтвердить что ты не робот

Ruby - Разница между массивом # << и массивом # push

Изучая документацию для Ruby 1.9.3, как Array # < и Array # push были разработаны для реализации добавления элемента в конец текущего массива. Однако между ними, по-видимому, есть тонкие различия.

Я столкнулся с тем, что оператор * можно использовать для добавления содержимого всего другого массива к текущему, но только С#push.

a = [1,2,3]
b = [4,5,6]

a.push *b
=> [1,2,3,4,5,6]

Попытка использовать # < < вместо этого дает различные ошибки, в зависимости от того, используется ли он с оператором точки и/или круглыми скобками.

Почему # < < не работает так же #push? На самом деле это не псевдоним для другого?

4b9b3361

Ответ 1

Они очень похожи, но не идентичны.

<< принимает единственный аргумент и помещает его в конец массива.

push, с другой стороны, принимает один или несколько аргументов, вставляя их все в конец.

Тот факт, что << принимает только один объект, является причиной того, что вы видите ошибку.

Ответ 2

Причина, по которой << не работает, а push - это:

  • push может принимать множество аргументов (что происходит, когда вы делаете *b).
  • << принимает только один аргумент.

Ответ 3

Основное различие между массивом # < < и Array # push

Array#<< # can be used to insert only single element in the Array

Array#push # can be used to insert more than single element in the Array

Другим существенным отличием является то, В случае вставки одного элемента

Массив # < < быстрее, чем Array # push

Бенчмаркинг может помочь в определении производительности этих двух способов, найти более здесь.

Ответ 4

Еще один важный момент, который следует отметить здесь, заключается в том, что << также является оператором. И он имеет более низкий приоритет, чем некоторые операторы, такие как тернарный оператор. Это может привести к неожиданным результатам. например:

arr1, arr2 = [], []

arr1.push true ? 1 : 0
arr1
# => [1] 

arr2 << true ? 1 : 0
arr2
# => [true] 

Ответ 5

Метод push добавляет элемент в конец массива. Он может иметь более одного аргумента. << используется для инициализации массива и может иметь только один аргумент, добавляет элемент в конце массива, если он уже инициализирован.