আমি রুবিতে একটি নির্দিষ্ট দৈর্ঘ্যের সাবস্ট্রিংগুলিতে একটি স্ট্রিং ছড়িয়ে দেওয়ার জন্য একটি মার্জিত এবং দক্ষ উপায় খুঁজছি।
এখনও অবধি, আমি যে সেরাটির সাথে আসতে পারলাম তা হ'ল:
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
সম্পাদনা করুন
আসল স্লাইস-ভিত্তিক সমাধানের তুলনায় স্ট্রিং.স্কান দ্রবণটি 512 কে 1 কে টুকরোতে 10000 বার কাটাতে প্রায় 60 সেকেন্ড সময় নেয় যা কেবল 2.4 সেকেন্ড লাগে takes