我想用value.some_method
替换散列中的每个value
。
例如,对于给定的简单散列:
{"a" => "b", "c" => "d"}`
每个值都应该是.upcase
d,所以看起来像这样:
{"a" => "B", "c" => "D"}
我尝试过#collect
和#map
,但总是只能得到数组。有没有一种优雅的方法来做到这一点呢?
更新
该死,我忘了:哈希是在一个不应该被改变的实例变量中。我需要一个具有更改后的值的新散列,但不希望显式定义该变量,然后循环填充它的散列。类似于:
new_hash = hash.magic{ ... }
发布于 2009-05-01 18:20:02
my_hash.each { |k, v| my_hash[k] = v.upcase }
或者,如果您希望以非破坏性方式执行此操作,并返回一个新的散列,而不是修改my_hash
a_new_hash = my_hash.inject({}) { |h, (k, v)| h[k] = v.upcase; h }
这个最后的版本有一个额外的好处,那就是你也可以转换密钥。
发布于 2017-01-09 11:10:17
由于ruby 2.4.0
,您可以使用本机Hash#transform_values
方法:
hash = {"a" => "b", "c" => "d"}
new_hash = hash.transform_values(&:upcase)
# => {"a" => "B", "c" => "D"}
还有破坏性的Hash#transform_values!
版本。
发布于 2011-09-10 02:25:16
您可以收集这些值,并再次将其从Array转换为Hash。
如下所示:
config = Hash[ config.collect {|k,v| [k, v.upcase] } ]
https://stackoverflow.com/questions/812541
复制相似问题