He estado buscando una manera elegante y eficiente de dividir una cadena en subcadenas de una longitud determinada en Ruby.¿Cuál es la mejor manera de cortar una cuerda en trozos de una longitud determinada en Ruby?
Hasta ahora, lo mejor que podía llegar a es la siguiente:
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)
=> []
Es posible que desee volver a chunk("", n)
[""]
en lugar de []
. Si es así, simplemente agregue esto como la primera línea del método:
return [""] if string.empty?
¿Recomendaría alguna solución mejor?
Editar
Gracias a Jeremy Ruten para esta solución elegante y eficaz:
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
Ok, ahora esto es excelente! Sabía que tenía que haber una mejor manera. Muchas gracias Jeremy Ruten. – MiniQuark
def chunk (cadena, tamaño); string.scan (/. {1, # {size}} /); fin – MiniQuark
Guau, me siento estúpido ahora. Nunca me había molestado en comprobar cómo funcionaba el escaneo. – Chuck