什么是最优雅的做事方式
'string'
=> ['s', 'st', 'str', 'stri', 'strin', 'string']
我一直在想一个班轮,但我不能完全做到。
欢迎任何解决方案,谢谢。
什么是最优雅的做事方式
'string'
=> ['s', 'st', 'str', 'stri', 'strin', 'string']
我一直在想一个班轮,但我不能完全做到。
欢迎任何解决方案,谢谢。
这个怎么样?
s = 'string'
res = s.length.times.map {|len| s[0..len]}
res # => ["s", "st", "str", "stri", "strin", "string"]
我能想出的更具声明性:
s = "string"
1.upto(s.length).map { |len| s[0, len] }
#=> ["s", "st", "str", "stri", "strin", "string"]
您可以在标准库中使用缩写
require 'abbrev'
s = Abbrev::abbrev(['string']).keys
puts s.inspect
在需要 Abbrev 库后,我必须添加另一种使用方式,并将 .abbrev 方法添加到 Array:
require 'abbrev'
s = ['string'].abbrev.keys
puts s.inspect
如果订单对匹配您在问题中的回报很重要,请致电.sort
。keys
s.chars.zip.inject{ |i,j| i << i.last + j.first }
另一个变体(这将在结果中包含空字符串):
s.each_char.inject([""]) {|a,ch| a << a[-1] + ch}
这个
[""]
a[-1] + ch
s = "string"
s.each_char.with_object([""]){|i,ar| ar << ar[-1].dup.concat(i)}.drop(1)
#=> ["s", "st", "str", "stri", "strin", "string"]