2016-04-17 25 views
4

Wie konvertiere ich einen String: s = '23534' auf ein Array als solche: a = [2,3,5,3,4]Convert String in int-Array in Ruby

Gibt es eine Möglichkeit über die Zeichen in Ruby zu iterieren und wandeln jede von ihnen to_i oder sogar haben die String als Array char dargestellt werden, wie in Java, und dann alle Zeichen umwandeln to_i

wie Sie sehen können, habe ich nicht einen Begrenzer, da solche , im String haben, alle anderen Antworten, die ich sO gefunden auf enthalten einen Begrenzungs char .

Antwort

9

Ein einfaches Motto w sein Ould:

s.each_char.map(&:to_i) 
#=> [2, 3, 5, 3, 4] 

Wenn Sie es Fehler explizit sein wollen, wenn die Zeichenfolge nicht nur ganze Zahlen enthalten ist, könnten Sie tun:

s.each_char.map { |c| Integer(c) } 

Dies würde heben eine ArgumentError: invalid value for Integer(): wenn die Zeichenfolge etwas anderes enthalten als ganze Zahlen. Andernfalls würden Sie für .to_i Nullen für Zeichen sehen.

+1

Ich mag die Idee, dass es Fehler explizit – mahatmanich

2

können Sie String#each_char verwenden:

array = [] 
s.each_char {|c| array << c.to_i } 
array 
#=> [2, 3, 5, 3, 4] 

Oder nur s.each_char.map(&:to_i)

+0

ahhhh each_char zur Rettung ... genau was ich in der Zeichenfolge api übersehen ... – mahatmanich

3

Kurz und knapp:

"23534".split('').map(&:to_i) 

Erläuterung:

"23534".split('') # Returns an array with each character as a single element. 

"23534".split('').map(&:to_i) # shortcut notation instead of writing down a full block, this is equivalent to the next line 

"23534".split('').map{|item| item.to_i } 
1

In Ruby 1.9.3 können Sie die eine Reihe von Zahlen in ein Array von Zahlen folgendes tun zu konvertieren:

Ohne ein Leerzeichen nach dem Komma von split (‚‘) Sie diese: „1 , 2,3 ".split (',') # => [" 1 "," 2 "," 3 "]

Mit einem Leerzeichen nach dem Komma von Split (',') erhalten Sie folgendes: "1,2,3" .split (',') # => ["1,2,3"]

Ohne Leerzeichen nach dem Trennzeichen (',') erhalten Sie: "1 , 2,3 ".split (','). Karte (&: to_i) # => [1,2,3]

Mit einem Leerzeichen nach dem Komma von split (' ') Sie diese: "1,2,3" .split (',') .map (&: to_i) # => [1]