577 votes

Comment ajoutez-vous un tableau dans un autre tableau dans Ruby et finissent pas avec un résultat multidimensionnel ?

<pre><code></code><p>Je m’attendais</p><pre><code></code></pre></pre>

831voto

pilcrow Points 20628

Vous avez une idée réalisable, mais l' #flatten! est au mauvais endroit -- il aplatit son récepteur, de sorte que vous pouvez l'utiliser pour tourner [1, 2, ['foo', 'bar']] en [1,2,'foo','bar'].

Je suis sans doute oublié quelques approches, mais vous pouvez concaténer:

a1.concat a2
a1 + a2              # creates a new array, as does a1 += a2

ou ajouter/ajouter:

a1.push(*a2)         # note the asterisk
a2.unshift(*a1)      # note the asterisk, and that a2 is the receiver

ou d'épissure:

a1[a1.length, 0] = a2
a1[a1.length..0] = a2
a1.insert(a1.length, *a2)

ou ajouter et aplatir:

(a1 << a2).flatten!  # a call to #flatten instead would return a new array

232voto

micmoo Points 3387

Vous pouvez utiliser l’opérateur + !

Vous pouvez lire tout la classe array ici : http://ruby-doc.org/core/classes/Array.html

89voto

Corlew Solutions Points 164

Le plus propre de l'approche est d'utiliser le Tableau#concat méthode; il ne va pas créer un nouveau tableau (à la différence du Tableau#+ qui fera la même chose, mais de créer un nouveau tableau).

Directement à partir de la documentation (http://www.ruby-doc.org/core-1.9.3/Array.html#method-i-concat):

concat(other_ary)

Ajoute les éléments de other_ary de soi.

Donc

[1,2].concat([3,4])  #=> [1,2,3,4]  

Tableau#concat n'aplatit pas un tableau multidimensionnel si il est passé en argument. Vous aurez besoin de gérer séparément:

arr= [3,[4,5]]
arr= arr.flatten   #=> [3,4,5]
[1,2].concat(arr)  #=> [1,2,3,4,5]

Enfin, vous pouvez utiliser notre corelib gem (https://github.com/corlewsolutions/corelib) qui ajoute utiles les aides à la Ruby classes de base. En particulier, nous avons un Tableau#add_all méthode qui sera automatiquement aplatir les tableaux multidimensionnels avant l'exécution de la méthode concat.

41voto

Joshua Cheek Points 9450

Voici deux façons, vous remarquerez dans ce cas que la première méthode retourne un nouveau tableau (se traduit par untableau = somearray + UnAutreTableau)

38voto

Joshmattvander Points 514

Essayez ceci, il regroupera vos baies en éliminant les doublons

http://www.ruby-doc.org/core/classes/Array.html

Davantage de documentation coup d’oeil à « Union Set »

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X