[英]All ways to split a string in k parts in ruby
獲得數組的最佳方法是什么,該數組包含將字符串拆分為k個因子的每種方法,其中因子也可能為空? 例如,如果k為3並且字符串為
Hello
那么我想要一個如下的返回值:
[ ["", "", "Hello"], ["","H","ello"], ["", "He", "llo"], ..., ["H", "e", "llo"], ["H", "el", "lo"], ..., ["Hello","",""] ]
我想在函數中使用它,以便k是參數(對於固定k,我只會編寫k-1個循環)。 有沒有辦法在紅寶石中做到這一點?
謝謝你的幫助!
s = "Hello"
k = 3
(0..s.length).to_a.repeated_combination(k - 1)
.map{|a| [0, *a, -1].each_cons(2).map{|i, j| "#{s} "[i...j]}}
結果:
[
["", "", "Hello"],
["", "H", "ello"],
["", "He", "llo"],
["", "Hel", "lo"],
["", "Hell", "o"],
["", "Hello", ""],
["H", "", "ello"],
["H", "e", "llo"],
["H", "el", "lo"],
["H", "ell", "o"],
["H", "ello", ""],
["He", "", "llo"],
["He", "l", "lo"],
["He", "ll", "o"],
["He", "llo", ""],
["Hel", "", "lo"],
["Hel", "l", "o"],
["Hel", "lo", ""],
["Hell", "", "o"],
["Hell", "o", ""],
["Hello", "", ""]
]
使用遞歸:
def doit(s, k, b = [], r = [])
case k
when 0
r << b
when 1
doit( [], 0, b + [s], r )
else
(0..s.size).each { |i| doit( s[i..-1], k-1, b + [s[0,i]], r ) }
end
r
end
v = doit('Hello', 3)
#=> [["", "", "Hello"],["", "H", "ello"],["", "He", "llo"],["", "Hel", "lo"],
# ["", "Hell", "o"],["", "Hello", ""],["H", "", "ello"],["H", "e", "llo"],
# ["H", "el", "lo"],["H", "ell", "o"],["H", "ello", ""],["He", "", "llo"],
# ["He", "l", "lo"],["He", "ll", "o"],["He", "llo", ""],["Hel", "", "lo"],
# ["Hel", "l", "o"],["Hel", "lo", ""],["Hell", "", "o"],["Hell", "o", ""],
# ["Hello", "", ""]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.