Ruby combinant un tableau en une seule chaîne

163

Dans Ruby, existe-t-il un moyen de combiner tous les éléments du tableau en une seule chaîne?

Exemple de tableau:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']

Exemple de sortie:

<p>Hello World</p><p>This is a test</p>
dennismonsewicz
la source
6
La documentation est votre ami! Cela vous aidera considérablement à étudier les méthodes de Array, String, Hash, etc.
Mark Thomas

Réponses:

303

Utilisez la Array#joinméthode (l'argument à joinest ce qu'il faut insérer entre les chaînes - dans ce cas un espace):

@arr.join(" ")
sepp2k
la source
1
Et si vous joigniez des chiffres? [1,2,3] => 123?
stevenspiel
3
@ mr.musicman joinfonctionne avec les énumérables de tout ce qui répond to_s, y compris les entiers, mais le résultat sera toujours une chaîne. Si vous voulez un résultat entier, vous pouvez utiliser to_isur le résultat.
sepp2k
1
Si vous avez initialement rompu une chaîne multiligne à l'aide de String#lines, vous pouvez la relier correctement à l'aide de my_string.join('')(notez l'argument de chaîne vide).
Frank Koehl
Pour ajouter à ce que @ sepp2k a dit: joinessaie en #to_strpremier et en #to_ssecond.
Greg Navis
19

Bien qu'un peu plus cryptique que join, vous pouvez également multiplier le tableau par une chaîne.

@arr * " "
David Harkness
la source
1
en plus d'être cryptique, y a-t-il un défaut possible lors de l'utilisation de cette astuce?
marcio
4
@marcioAlmada Pas de défaut, juste des frais généraux minimes. Dans array.c, la première chose que fait Ruby est de vérifier un type de chaîne, puis d'appeler la méthode de jointure. Aussi: faites levier avec des roches de source d'exposition! Essayez par vous-même: $ Array.instance_methods.*($ est un raccourci pour show-source)
okket
1

Voici ma solution:

@arr = ['<p>Hello World</p>', '<p>This is a test</p>']
@arr.reduce(:+)
=> <p>Hello World</p><p>This is a test</p>
von spotz
la source