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 솔루션은 2.4 초 밖에 걸리지 않는 원래 슬라이스 기반 솔루션과 비교하여 512k를 1k 청크로 10000 번 자르는 데 약 60 초가 걸립니다.