我有一些Ruby代码,它在命令行上采用以下格式的日期:
-d 20080101,20080201..20080229,20080301
我想运行20080201
和20080229
之间的所有日期,包括列表中的其他日期。
我可以获得字符串20080201..20080229
,那么将其转换为Range实例的最佳方法是什么?目前,我正在使用eval
,但我觉得应该有更好的方法。
@Purfideas我在寻找一种更通用的答案来将任何int..int
类型的字符串转换成一个范围。
发布于 2008-09-10 08:04:33
但接下来就这么做吧
ends = '20080201..20080229'.split('..').map{|d| Integer(d)}
ends[0]..ends[1]
无论如何,出于安全原因,我不推荐eval
发布于 2010-07-14 14:04:06
Range.new(*self.split("..").map(&:to_i))
发布于 2008-09-10 16:47:45
不带参数的Inject适用于两个元素数组:
rng='20080201..20080229'.split('..').inject { |s,e| s.to_i..e.to_i }
当然,这可以是泛型的
class Range
def self.from_ary(a)
a.inject{|s,e| s..e }
end
end
rng = Range.from_ary('20080201..20080229'.split('..').map{|s| s.to_i})
rng.class # => Range
https://stackoverflow.com/questions/53472
复制相似问题