Ruby combinando uma matriz em uma string

163

Em Ruby, existe uma maneira de combinar todos os elementos da matriz em uma única string?

Matriz de exemplo:

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

Saída de exemplo:

<p>Hello World</p><p>This is a test</p>
dennismonsewicz
fonte
6
A documentação é sua amiga! Ele irá ajudá-lo consideravelmente para estudar os métodos de Array, String, Hash, etc.
Mark Thomas

Respostas:

303

Use o Array#joinmétodo (o argumento joiné o que inserir entre as strings - neste caso, um espaço):

@arr.join(" ")
sepp2k
fonte
1
e se você estivesse juntando dígitos? [1,2,3] => 123?
Stevenspiel
3
@ mr.musicman jointrabalha com enumeráveis ​​de qualquer coisa que responda to_s, incluindo números inteiros, mas o resultado será sempre uma string. Se você deseja um resultado inteiro, pode usá to_i-lo.
sepp2k
1
Se você inicialmente quebrou uma string de várias linhas usando String#lines, você pode vinculá-la com cuidado usando my_string.join('')(observe o argumento de string vazia).
31915 Frank Koehl
Para adicionar ao que o @ sepp2k disse: jointenta #to_strprimeiro e #to_ssegundo.
Greg Navis
19

Embora um pouco mais enigmático do que join, você também pode multiplicar a matriz por uma string.

@arr * " "
David Harkness
fonte
1
além de ser enigmático, existe alguma falha possível ao usar esse truque?
marcio
4
@marcioAlmada Sem falhas, apenas sobrecarga mínima. No array.c, a primeira coisa que Ruby faz é procurar um tipo de string e depois chamar o método join. Também: forçar com pedras de show-source! Tente você mesmo: $ Array.instance_methods.*($ é uma abreviação de show-source)
okket 16/03
1

Aqui está a minha solução:

@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
fonte