Вопрос по arrays, append, ruby – Ruby - разница между Array # << и Array # push

46

Из изучения документации для Ruby 1.9.3 оба Array # & lt; & lt; и Array # push были разработаны для добавления элемента в конец текущего массива. Тем не менее, кажется, что есть тонкие различия между ними.

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

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

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

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

Почему # & lt; & lt; не работает так же, как #push? Разве одно не является псевдонимом другого?

сравните это, чтобы добавить и расширить в Pythonstackoverflow.com/questions/252703 dreftymac

Ваш Ответ

5   ответов
9

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

  1. push can accept many arguments (which is what happens when you do *b).
  2. << only accepts a single argument.
74

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

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

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

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

Чтобы расширить это, вы можете кратко «нажать». 2 массива с + =. Используйте & lt; & lt; добавить одно значение в массив.
Я действительно считаю, что текущая версия Ruby допускает использование & lt; & lt; & quot; принять более одного аргумента.
@Isotope - это создает дополнительные объекты, поэтому его следует рассматривать как анти-шаблон, если вы действительно не хотите изменять первый массив.
0

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

9

Основное различие между Array # & lt; & lt; и массив # 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

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

7

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

arr1, arr2 = [], []

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

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

Похожие вопросы