Comment diviser une chaîne délimitée en Ruby et la convertir en un tableau?

233

J'ai une chaîne

"1,2,3,4"

et je voudrais le convertir en un tableau:

[1,2,3,4]

Comment?

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

Réponses:

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

Ou pour les entiers:

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

Ou pour les versions ultérieures de ruby ​​(> = 1.9 - comme l'a souligné Alex):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
la source
28
N'oubliez pas que si vous utilisez> = 1,9, vous pouvez simplement utiliser "1,2,3,4" .split (','). Map (: to_i)
Alex Fort
7
Si vous utilisez un support actif, vous pouvez faire: map (&: to_i)
jonnii
31

"1,2,3,4".split(",") sous forme de chaînes

"1,2,3,4".split(",").map { |s| s.to_i } sous forme d'entiers

Oliver N.
la source
19

Pour String Integersans espace commeString

arr = "12345"

arr.split('')

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

Pour String Integeravec l'espace commeString

arr = "1 2 3 4 5"

arr.split(' ')

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

Pour String Integersans espace commeInteger

arr = "12345"

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

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

Pour chaîne

arr = "abc"

arr.split('')

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

Explication :

  1. arr -> chaîne sur laquelle vous allez effectuer n'importe quelle action.
  2. split() -> est une méthode qui divise l'entrée et la stocke en tant que tableau.
  3. ''ou ' 'ou ','-> est une valeur, qui doit être supprimée de la chaîne donnée.
Aravin
la source
1

la façon la plus simple de convertir une chaîne qui a un délimiteur comme une virgule est simplement d'utiliser la méthode de fractionnement

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

vous pouvez trouver plus d'informations sur la façon d'utiliser la méthode de fractionnement dans les documents ruby

Divise str en sous-chaînes en fonction d'un délimiteur, renvoyant un tableau de ces sous-chaînes.

Si le modèle est une chaîne, son contenu est utilisé comme délimiteur lors du fractionnement de str. Si le motif est un espace unique, str est divisé sur un espace blanc, les espaces blancs de début et les séquences de caractères d'espaces contigus étant ignorés.

Si le modèle est une expression rationnelle, str est divisé là où le modèle correspond. Chaque fois que le modèle correspond à une chaîne de longueur nulle, str est divisé en caractères individuels. Si le modèle contient des groupes, les correspondances respectives seront également renvoyées dans le tableau.

Si le motif est omis, la valeur de $; est utilisé. Si $; est nul (ce qui est la valeur par défaut), str est divisé sur un espace comme si `` était spécifié.

Si le paramètre limit est omis, les champs nuls de fin sont supprimés. Si la limite est un nombre positif, au plus ce nombre de champs sera retourné (si la limite est 1, la chaîne entière est retournée comme la seule entrée dans un tableau). S'il est négatif, il n'y a pas de limite au nombre de champs retournés et les champs nuls de fin ne sont pas supprimés.

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

each_charfait essentiellement la même chose que split(''): Il divise une chaîne en un tableau de ses caractères.

hmmm, je me rends compte maintenant que dans la question d'origine, la chaîne contient des virgules, donc ma réponse n'est pas vraiment utile ;-( ..

andiba
la source
3
pouvez-vous modifier votre réponse pour expliquer ce que vous faites?
MZaragoza