Jak podzielić rozdzielany ciąg w Ruby i przekonwertować go na tablicę?

233

Mam sznurek

"1,2,3,4"

i chciałbym przekonwertować go na tablicę:

[1,2,3,4]

W jaki sposób?

Neil Middleton
źródło
11
„1,2 | 3; 42: 4711” .scan (/ \ d + /). Map {| i | i.to_i}
Jonas Elfström

Odpowiedzi:

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

Lub dla liczb całkowitych:

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

Lub dla późniejszych wersji ruby ​​(> = 1.9 - jak zauważył Alex):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
źródło
28
Pamiętaj, że jeśli używasz> = 1.9, możesz po prostu użyć „1,2,3,4” .split (','). Map (: to_i)
Alex Fort
7
Jeśli używasz aktywnego wsparcia, możesz: map (&: to_i)
jonnii
31

"1,2,3,4".split(",") jak struny

"1,2,3,4".split(",").map { |s| s.to_i } jako liczby całkowite

Oliver N.
źródło
19

Dla String Integerbez przestrzeni jakoString

arr = "12345"

arr.split('')

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

Bo String Integerz przestrzenią jakString

arr = "1 2 3 4 5"

arr.split(' ')

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

Dla String Integerbez przestrzeni jakoInteger

arr = "12345"

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

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

Na ciąg

arr = "abc"

arr.split('')

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

Objaśnienie :

  1. arr -> ciąg znaków, który zamierzasz wykonać dowolną akcję.
  2. split() -> to metoda dzieląca dane wejściowe i przechowująca je jako tablicę.
  3. ''lub ' 'lub ','-> jest wartością, którą należy usunąć z podanego ciągu.
Aravin
źródło
1

najprostszym sposobem na konwersję łańcucha, który ma separator podobny do przecinka, jest użycie metody split

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

Więcej informacji na temat korzystania z metody podziału znajdziesz w ruby docs

Dzieli ciąg na podciągi na podstawie separatora, zwracając tablicę tych podciągów.

Jeśli wzorzec jest ciągiem, wówczas jego zawartość jest używana jako separator podczas dzielenia str. Jeśli wzorzec jest pojedynczą spacją, str jest dzielony na białe znaki, a wiodące białe znaki i ciągi ciągłych białych znaków są ignorowane.

Jeśli wzorzec jest Regexp, str jest dzielone tam, gdzie pasuje wzorzec. Ilekroć wzór pasuje do łańcucha o zerowej długości, str jest dzielone na poszczególne znaki. Jeśli wzorzec zawiera grupy, odpowiednie dopasowania również zostaną zwrócone w tablicy.

Jeśli wzorzec zostanie pominięty, wartość $; Jest używane. Jeśli $; ma wartość zero (co jest wartością domyślną), str jest dzielony na białe znaki, tak jakby podano ``.

Jeśli parametr limitu zostanie pominięty, końcowe pola zerowe są pomijane. Jeśli limit jest liczbą dodatnią, co najwyżej ta liczba pól zostanie zwrócona (jeśli limit wynosi 1, zwracany jest cały ciąg znaków jako jedyny wpis w tablicy). Jeśli wartość jest ujemna, nie ma ograniczenia liczby zwracanych pól, a końcowe pola zerowe nie są pomijane.

MZaragoza
źródło
-1
"12345".each_char.map(&:to_i)

each_charrobi w zasadzie to samo co split(''): Dzieli ciąg na tablicę swoich znaków.

hmmm, właśnie zdaję sobie sprawę, że w pierwotnym pytaniu ciąg zawiera przecinki, więc moja odpowiedź nie jest zbyt pomocna ;-( ..

andiba
źródło
3
czy możesz edytować swoją odpowiedź, aby wyjaśnić, co robisz?
MZaragoza,