ฉันกำลังมองหาวิธีที่สวยงามและมีประสิทธิภาพในการรวมสตริงเป็นสตริงย่อยที่มีความยาวที่กำหนดใน 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 สำหรับโซลูชันที่หรูหราและมีประสิทธิภาพนี้: [แก้ไข: ไม่มีประสิทธิภาพ!]
def chunk(string, size)
string.scan(/.{1,#{size}}/)
end
แก้ไข
โซลูชัน string.scan ใช้เวลาประมาณ 60 วินาทีในการสับ 512k เป็น 1k ชิ้น 10,000 ครั้งเมื่อเทียบกับโซลูชันที่ใช้สไลซ์ดั้งเดิมซึ่งใช้เวลาเพียง 2.4 วินาที