目标:
powerset('hey')
#=> ['h', 'he', 'hey', 'e', 'ey', 'y']
为其他语言提供了几种解决方案,可以适应Ruby,但我想知道是否有更多的Ruby惯用方法。
答案 0 :(得分:1)
也许某人可以提供功能性解决方案,但这是一个简单的实现:
def ngrams(s)
xs = s.chars
acc = []
(0..xs.length-1).each do |i|
(i..xs.length-1).each do |j|
acc << xs[i..j].join
end
end
acc
end
p ngrams("hey")
p ngrams("abcd")
答案 1 :(得分:1)
您可以尝试这样的事情:
str = 'hey'
str.size.times.flat_map{|i| (i+1..str.size).map{|ii| str[i...ii]}}
# => ["h", "he", "hey", "e", "ey", "y"]
答案 2 :(得分:1)
与尖峰相同的一般方法,但使用&#34;魔法&#34; flat_map
:
def all_substrings(str)
(0...str.size).flat_map do |i|
(i...str.size).map do |j|
str[i..j]
end
end
end