Je cherchais un moyen élégant et efficace de couper une corde en sous-chaînes d'une longueur donnée en Ruby.Quelle est la meilleure façon de couper une chaîne en morceaux d'une longueur donnée dans Ruby?
Jusqu'à présent, le mieux que je pouvais trouver est la suivante:
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)
=> []
Vous voudrez peut-être revenir chunk("", n)
[""]
au lieu de []
. Si c'est le cas, il suffit d'ajouter ceci comme première ligne de la méthode:
return [""] if string.empty?
Recommanderiez-vous la meilleure solution?
Modifier
Merci à Jeremy Ruten pour cette solution élégante et efficace:
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
Ok, maintenant c'est excellent! Je savais qu'il devait y avoir un meilleur moyen. Merci beaucoup Jeremy Ruten. – MiniQuark
def morceau (chaîne, taille); string.scan (/. {1, # {taille}} /); fin – MiniQuark
Wow, je me sens stupide maintenant. Je n'ai même jamais pris la peine de vérifier le fonctionnement du scan. – Chuck