Como dividir uma string delimitada em Ruby e convertê-la em uma matriz?

233

Eu tenho uma corda

"1,2,3,4"

e gostaria de convertê-lo em uma matriz:

[1,2,3,4]

Quão?

Neil Middleton
fonte
11
"1,2 | 3; 42: 4711" .scan (/ \ d + /). Mapa {| i | i.to_i}
Jonas Elfström

Respostas:

412
>> "1,2,3,4".split(",")
=> ["1", "2", "3", "4"]

Ou para números inteiros:

>> "1,2,3,4".split(",").map { |s| s.to_i }
=> [1, 2, 3, 4]

Ou para versões posteriores do ruby ​​(> = 1.9 - como apontado por Alex):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
fonte
28
Lembre-se, se você estiver usando> = 1.9, você pode simplesmente usar "1,2,3,4" .split (','). Map (: to_i) #
Alex Alex
7
Se você estiver usando o apoio ativo que você pode fazer: mapa (&: to_i)
jonnii
31

"1,2,3,4".split(",") como cordas

"1,2,3,4".split(",").map { |s| s.to_i } como inteiros

Oliver N.
fonte
19

Para String Integersem espaço comoString

arr = "12345"

arr.split('')

output: ["1","2","3","4","5"]

Para String Integercom espaço comoString

arr = "1 2 3 4 5"

arr.split(' ')

output: ["1","2","3","4","5"]

Para String Integersem espaço comoInteger

arr = "12345"

arr.split('').map(&:to_i)

output: [1,2,3,4,5]

For String

arr = "abc"

arr.split('')

output: ["a","b","c"]

Explicação :

  1. arr -> string que você executará qualquer ação.
  2. split() -> é um método, que divide a entrada e a armazena como matriz.
  3. ''ou ' 'ou ','-> é um valor que precisa ser removido da determinada sequência.
Aravin
fonte
1

a maneira mais simples de converter uma string que possui um delimitador como vírgula é apenas usar o método split

"1,2,3,4".split(',') # "1", "2", "3", "4"]

você pode encontrar mais informações sobre como usar o método split nos documentos ruby

Divide str em substrings com base em um delimitador, retornando uma matriz desses substrings.

Se pattern for uma String, seu conteúdo será usado como delimitador ao dividir str. Se o padrão for um espaço único, str será dividido em espaço em branco, com espaços em branco à esquerda e execuções de caracteres de espaço em branco contíguos ignorados.

Se o padrão é uma Regexp, str é dividido onde o padrão corresponde. Sempre que o padrão corresponde a uma sequência de comprimento zero, str é dividido em caracteres individuais. Se o padrão contiver grupos, as respectivas correspondências também serão retornadas na matriz.

Se o padrão for omitido, o valor de $; é usado. Se $; é nulo (que é o padrão), str é dividido no espaço em branco como se `` tivesse sido especificado.

Se o parâmetro limit for omitido, os campos nulos à direita serão suprimidos. Se o limite for um número positivo, no máximo esse número de campos será retornado (se o limite for 1, a cadeia inteira será retornada como a única entrada em uma matriz). Se negativo, não há limite para o número de campos retornados e os campos nulos à direita não são suprimidos.

MZaragoza
fonte
-1
"12345".each_char.map(&:to_i)

each_charfaz basicamente o mesmo que split(''): Divide uma string em uma matriz de seus caracteres.

hmmm, agora percebo que na pergunta original a string contém vírgulas, então minha resposta não é realmente útil ;-( ..

andiba
fonte
3
você pode editar sua resposta para explicar o que está fazendo?
MZaragoza