103 Stimmen

Wie kann man in Ruby eine Zeichenkette am besten in Stücke einer bestimmten Länge zerlegen?

Ich habe nach einer eleganten und effizienten Möglichkeit gesucht, eine Zeichenkette in Ruby in Teilstrings einer bestimmten Länge zu zerlegen.

Das Beste, was mir bisher eingefallen ist, ist dies:

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)
=> []

Sie möchten vielleicht chunk("", n) zur Rückkehr [""] anstelle von [] . Wenn ja, fügen Sie dies einfach als erste Zeile der Methode hinzu:

return [""] if string.empty?

Können 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 etwa 60 Sekunden, um 512k in 1k Chunks 10000 Mal zu zerhacken, während die ursprüngliche Slice-basierte Lösung nur 2,4 Sekunden benötigt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X