最优雅的做法是什么
'string'
=> ['s', 'st', 'str', 'stri', 'strin', 'string']
我一直试图想到一个班轮,但我不能完全到达那里 欢迎任何解决方案,谢谢。
答案 0 :(得分:12)
这个怎么样?
s = 'string'
res = s.length.times.map {|len| s[0..len]}
res # => ["s", "st", "str", "stri", "strin", "string"]
答案 1 :(得分:6)
我能提出的声明越多:
s = "string"
1.upto(s.length).map { |len| s[0, len] }
#=> ["s", "st", "str", "stri", "strin", "string"]
答案 2 :(得分:5)
您可以在标准库中使用Abbrev
require 'abbrev'
s = Abbrev::abbrev(['string']).keys
puts s.inspect
我必须在需要Abbrev库后添加另一种方法来使用它,并将.abbrev方法添加到Array:
require 'abbrev'
s = ['string'].abbrev.keys
puts s.inspect
如果订单与问题中的回报相符非常重要,请拨打.sort
上的keys
。
答案 3 :(得分:5)
s.chars.zip.inject{ |i,j| i << i.last + j.first }
答案 4 :(得分:0)
另一个变体(这将在结果中包含空字符串):
s.each_char.inject([""]) {|a,ch| a << a[-1] + ch}
此
[""]
a[-1] + ch
答案 5 :(得分:0)
s = "string"
s.each_char.with_object([""]){|i,ar| ar << ar[-1].dup.concat(i)}.drop(1)
#=> ["s", "st", "str", "stri", "strin", "string"]