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 en cours. 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 append le contenu d’un autre tableau entier au tableau actuel, mais seulement avec #push.

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

Tenter d’utiliser # << au lieu de cela donne diverses erreurs, selon qu'il est utilisé avec l'opérateur de points et / ou les parenthèses.

Pourquoi # << ne fonctionne-t-il pas de la même manière que #push? N'est-ce pas un alias pour l'autre?

Ils sont très similaires, mais pas identiques.

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

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

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

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

  1. push peut accepter de nombreux arguments (ce qui se passe quand vous le faites *b ).
  2. << accepte uniquement un seul argument.

Un autre point important à noter ici est que << est également un opérateur. Et il a une priorité inférieure à celle de certains opérateurs comme l'opérateur ternaire. Cela pourrait entraîner des résultats inattendus. par exemple:

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

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 importante est que, en cas d’insertion d’un seul élément,

Array # << est plus rapide que Array # push

L'parsing comparative peut aider à trouver la performance de ces deux manières, trouver plus ici .

La méthode push ajoute un élément à la fin du tableau. Il peut avoir plusieurs arguments. << est utilisé pour initialiser le tableau et ne peut avoir qu'un seul argument, ajoute un élément à la fin du tableau s'il est déjà initialisé.