更换哈希键的更好方法

时间:2013-12-18 00:00:09

标签: ruby

我想使用规范化函数规范化Hash的密钥,以便这个哈希值

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

将转换为

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

此处,规范化功能会从键中删除下划线,对其进行缩减,并使其成为符号。

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

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

有没有更好的方法呢?

此问题与问题“How to replace all hash keys having a '.'?”有关。我想知道最佳(更简洁或更快)的方法。

3 个答案:

答案 0 :(得分:3)

我将如何做到这一点

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

答案 1 :(得分:1)

以下是Rails的用法(在这种情况下,它们会扩展Hash以生成所有键字符串,但您可以轻松地将该方法放在其他位置。)

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

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

答案 2 :(得分:0)

如果您使用的是Rails应用程序,或想要引入ActiveSupport,则可以使用ActiveSupport::HashWithIndifferentAccess'key':key设置或获取值哈希