将哈希值转换为整数

时间:2018-04-09 22:47:50

标签: ruby

我有一个小程序,它创建一个哈希并存储当前日期时间,其中年,月和日存储为单独的值。这需要我将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方法变得不必要很长。

1 个答案:

答案 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