替换哈希键的更好方法



我想使用归一化函数对Hash的密钥进行归一化,这样这个散列

{"aType" => 1, "b_Type" => 2}

将转换为

{:atype => 1, :btype => 2}

在这里,normalization函数从键中删除下划线,将其向下平移,并使其成为符号。

我用map写了以下内容(假设normalize是一种归一化方法):

params = params.map {|k,v| {normalize(k) => v}}.inject(:merge)

有更好的方法吗?

这个问题与一个问题"如何替换所有具有'.'的哈希键?"有关。我想知道这样做的最佳方法(不那么冗长或更快)。

以下是的操作方法

Hash[h.map {|k,v| [normalize(k), v] }]

Rails是这样做的(在这种情况下,它们扩展Hash使所有键都成为字符串,但您也可以很容易地将该方法放在其他地方)。

def stringify_keys!
  keys.each do |key|
    self[key.to_s] = delete(key)
  end
  self
end

尽管所有这些方法都是合理的,而且对于大多数用途来说,可能没有实质性的可读性或性能差异。

如果您在Rails应用程序中,或者想要引入ActiveSupport,您可以使用ActiveSupport::HashWithIndidifferenceAccess,它允许您使用'key':key来设置或从哈希中获取值

最新更新