Ruby'de belirli bir uzunluktaki alt dizelere bir dizge eklemenin zarif ve verimli bir yolunu arıyordum.
Şimdiye kadar bulabildiğim en iyi şey şudur:
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)
=> []
Bunun yerine chunk("", n)
geri dönmek isteyebilirsiniz . Öyleyse, bunu yöntemin ilk satırı olarak eklemeniz yeterlidir:[""]
[]
return [""] if string.empty?
Daha iyi bir çözüm önerir misiniz?
Düzenle
Bu zarif ve etkili çözüm için Jeremy Ruten'e teşekkürler: [düzenleme: Verimli DEĞİL!]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
Düzenle
String.scan çözümü, yalnızca 2,4 saniye süren orijinal dilim tabanlı çözüme kıyasla 512 bin parçayı 10000 kez 1 bin parçaya ayırmak yaklaşık 60 saniye sürer.