首先,我有:
s = "1,3..5,8"
我想要的:
["1", "3", "4", "5", "8"]
我找到了如下方法
r = s.split(/\s?,\s?/)
=> ["10", "12..15", "17", "
r.map do |c|
if Fixnum === eval(c)
c
else
eval(c).map(&:to_s).flatten
end
end
=> ["10", "12", "13", "14", "15", "17", "18"]
是否有更好的方法来实现这一目标?
最佳答案
我不会使用 eval
。
稍微好一点的方法是:
s = "1,3...5,8"
p s.split(',').map { |n|
if n.scan('...').empty?
n
else
Range.new(*n.split('...', 2)).to_a
end
}.flatten
# => ["1", "3", "4", "5", "8"]
编辑: 修复了 @fl00r 建议的代码以处理多位数字。
关于ruby - int 的字符串和 int 数组的范围(寻求改进),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10102194/