我有一个小程序,它创建一个哈希并存储当前日期时间,其中年,月和日存储为单独的值。这需要我将Time
对象转换为String
对象,但我希望将这些值存储为Integer
个对象以供稍后比较。
current = {}
current[:year], current[:month], current[:day] = Time.now.to_s[0..10].split('-')
我通过编写以下代码实现了这一目标:
current.map { |key, value| current[key] = value.to_i }
但是,我注意到Ruby 2.4.0
附带了一个破坏性转换哈希值的简洁方法,允许我将proc作为参数传递:
current.transform_values!(&:to_i)
我的问题是:你会如何在早期版本的Ruby中编写相同的前一行代码?我问,因为我认为map方法变得不必要很长。
答案 0 :(得分:1)
针对特定案例的解决方案
如果你想要整数,为什么不使用Time
对象的内置方法而不是创建字符串?
t = Time.now
current = {year: t.year, month: t.month, day: t.day}
现在它们都是整数值。
<强>重新执行强>
或者,您可以自己实现该方法,如Rails所做的那样:
class Hash
def transform_values!
return enum_for(:transform_values!) unless block_given?
each do |key, value|
self[key] = yield(value)
end
end
end