web-dev-qa-db-fra.com

Ruby - Différence entre Array # << et Array # push

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?

46
RavensKrag

Ils sont très similaires, mais pas identiques.

<< accepte un seul argument et le pousse à la fin du tableau.

Push , d'autre part, accepte un ou plusieurs arguments, les poussant tous vers la fin.

Le fait que << n'accepte qu'un seul objet est la raison pour laquelle vous voyez l'erreur.

74
x1a4

La raison pour laquelle << ne fonctionne pas et que Push fonctionne, est que:

  1. Push peut accepter plusieurs arguments (c'est ce qui arrive quand vous faites *b).
  2. << n'accepte qu'un seul argument.
9
Weiser

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 .

9
Akshay Mohite

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] 
7
Santhosh

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é.

0
Abhishek Singh