我一直在寻找一种优雅而有效的方法,在 Ruby 中将字符串组块为给定长度的子字符串。
到目前为止,我能想到的最好的办法是:
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)
=> []
您可能希望 chunk("", n)
返回 [""]
而不是 []
。如果是这样,只需在方法的第一行添加:
return [""] if string.empty?
你有更好的建议吗?
剪辑
感谢 Jeremy Ruten 提供的这个优雅而高效的解决方案: [ edit: NOT effect! ]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
剪辑
Can 解决方案将512k 分解为1k 块10000次,大约需要60秒,而原始的基于片的解决方案只需要2.4秒。