En examinant la documentation de Ruby 1.9.3, Array # << et Array # Push ont été conçus pour implémenter l'ajout d'un élément à la fin du tableau actuel. Cependant, il semble y avoir des différences subtiles entre les deux.
Celui que j'ai rencontré est que l'opérateur * peut être utilisé pour ajouter le contenu d'un autre tableau entier au tableau actuel, mais uniquement avec #Push.
a = [1,2,3]
b = [4,5,6]
a.Push *b
=> [1,2,3,4,5,6]
Tenter d'utiliser # << à la place génère diverses erreurs, selon qu'il est utilisé avec l'opérateur point et/ou entre parenthèses.
Pourquoi # << ne fonctionne-t-il pas de la même manière que #Push? L'un n'est-il pas en réalité un alias pour l'autre?
La raison pour laquelle <<
ne fonctionne pas et que Push
fonctionne, est que:
Push
peut accepter plusieurs arguments (c'est ce qui arrive quand vous faites *b
).<<
n'accepte qu'un seul argument.La principale différence entre Array # << et Array # Push est
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
Une autre différence significative est la suivante: En cas d'insertion d'un seul élément,
Array # << est plus rapide que Array # Push
Benchmarking peut vous aider à connaître les performances de ces deux méthodes, en savoir plus ici .
Un autre point important à noter ici est que <<
est également un opérateur. Et sa préséance est inférieure à celle de certains opérateurs comme l'opérateur ternaire. Cela pourrait conduire à des résultats inattendus. par exemple:
arr1, arr2 = [], []
arr1.Push true ? 1 : 0
arr1
# => [1]
arr2 << true ? 1 : 0
arr2
# => [true]
La méthode Push
ajoute un élément à la fin du tableau.Il peut avoir plusieurs arguments .<<
est utilisé pour initialiser un tableau et ne peut avoir qu'un seul argument, ajoute un élément à la fin d'un tableau s'il est déjà initialisé.