मैं रूबी में दिए गए लम्बाई के सब्सट्रिंग्स में एक स्ट्रिंग को चट करने के लिए एक सुरुचिपूर्ण और कुशल तरीके की तलाश में हूं।
अब तक, सबसे अच्छा मैं इस के साथ आ सकता है:
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?
क्या आप कोई बेहतर उपाय सुझाएंगे?
संपादित करें
इस सुरुचिपूर्ण और कुशल समाधान के लिए जेरेमी रुटेन को धन्यवाद: [संपादित करें: कुशल नहीं!]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
संपादित करें
मूल स्लाइस-आधारित समाधान जो केवल 2.4 सेकंड लेता है, की तुलना में स्ट्रिंग.scan समाधान को 60k को 1k chunks में 10000k में 60 सेकंड तक का समय लगता है।