我想使用归一化函数对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
来设置或从哈希中获取值