2016-07-14 14 views
-1

Wie kann ich folgend in Ruby zu tun:Ruby-Split-String in 7 Zeichen Stücke an jedem Charakter

a = 1234567890 

Split into strings 7 characters in length at each character: 

=> [1234567,2345678,3456789,4567890] 

Dank!

Edit: Danke euch allen für die Hilfe. Entschuldige, dass ich nicht gesagt habe, was ich versucht habe (obwohl nichts in der Nähe einer Lösung war).

+1

Willkommen bei Stack Overflow. Bitte lesen Sie "[fragen]" einschließlich der verlinkten Seiten. Wir würden gerne Beweise für Ihre Bemühungen sehen. Was hast du versucht und warum hat es nicht funktioniert? Hast du nach Lösungen gesucht? Wenn ja, warum haben sie nicht geholfen? Wie es scheint, dass Sie uns bitten, Code für Sie zu schreiben, für den SO nicht ist. –

Antwort

1
a.to_s.each_char.each_cons(7).map{|s| s.join.to_i} 
# => [1234567, 2345678, 3456789, 4567890] 
1
a = 1234567890 

# Convert to a string, then convert that string 
# into an array of characters 
chars = a.to_s.chars # => ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] 

slices = [] 

# Slice the array into groups of 7, with successive indices 
chars.each_cons(7) do |cons| 
    slices << cons.join # Join each 7-item array into a string and push it 
end 

p slices # => ["1234567", "2345678", "3456789", "4567890"] 

Die Schlüsselmethode für Sie suchen ist each_cons.

0

Wenn Sie einige Unbekannten Ruby-Methoden bilden verwenden, dann funktioniert das auch:

(0..a.to_s.size-7).map { |i| a.to_s.chars.rotate(i).take(7).join.to_i } 
#=> [1234567, 2345678, 3456789, 4567890] 
0
a.to_s.scan(/(?=(.{7}))/).map { |arr| arr.first.to_i } 
    #=> [1234567, 2345678, 3456789, 4567890] 

(?= ...) eine positive Vorschau ist. (.{7}) stimmt mit den nächsten sieben Zeichen in Erfassungsgruppe 1 überein. Siehe String#scan für wie scan Erfassungsgruppen behandelt. Wir haben

s = a.to_s 
    #=> "1234567890" 
b = s.scan(/(?=(.{7}))/) 
    #=> [["1234567"], ["2345678"], ["3456789"], ["4567890"]] 
b.map { |arr| arr.first.to_i } 
    #=> [1234567, 2345678, 3456789, 4567890]