Ich habe nach einer eleganten und effizienten Möglichkeit gesucht, eine Zeichenfolge in Ruby in Teilzeichenfolgen einer bestimmten Länge zu zerlegen.
Das Beste, was ich bisher finden konnte, ist Folgendes:
def chunk(string, size)
(0..(string.length-1)/size).map{|i|string[i*size,size]}
end
>> chunk("abcdef",3)
=> ["abc", "def"]
>> chunk("abcde",3)
=> ["abc", "de"]
>> chunk("abc",3)
=> ["abc"]
>> chunk("ab",3)
=> ["ab"]
>> chunk("",3)
=> []
Vielleicht möchten Sie statt chunk("", n)
zurückkehren . Wenn ja, fügen Sie dies einfach als erste Zeile der Methode hinzu:[""]
[]
return [""] if string.empty?
Würden Sie eine bessere Lösung empfehlen?
Bearbeiten
Vielen Dank an Jeremy Ruten für diese elegante und effiziente Lösung: [Bearbeiten: NICHT effizient!]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
Bearbeiten
Die string.scan-Lösung benötigt ungefähr 60 Sekunden, um 512k 10000-mal in 1k-Chunks zu zerlegen, verglichen mit der ursprünglichen Slice-basierten Lösung, die nur 2,4 Sekunden dauert.