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>

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(" ")

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 * " "

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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.