首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何更改哈希值?

如何更改哈希值?
EN

Stack Overflow用户
提问于 2009-05-01 18:17:46
回答 12查看 135.3K关注 0票数 137

我想用value.some_method替换散列中的每个value

例如,对于给定的简单散列:

代码语言:javascript
复制
{"a" => "b", "c" => "d"}` 

每个值都应该是.upcased,所以看起来像这样:

代码语言:javascript
复制
{"a" => "B", "c" => "D"}

我尝试过#collect#map,但总是只能得到数组。有没有一种优雅的方法来做到这一点呢?

更新

该死,我忘了:哈希是在一个不应该被改变的实例变量中。我需要一个具有更改后的值的新散列,但不希望显式定义该变量,然后循环填充它的散列。类似于:

代码语言:javascript
复制
new_hash = hash.magic{ ... }
EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-05-01 18:20:02

代码语言:javascript
复制
my_hash.each { |k, v| my_hash[k] = v.upcase } 

或者,如果您希望以非破坏性方式执行此操作,并返回一个新的散列,而不是修改my_hash

代码语言:javascript
复制
a_new_hash = my_hash.inject({}) { |h, (k, v)| h[k] = v.upcase; h } 

这个最后的版本有一个额外的好处,那就是你也可以转换密钥。

票数 230
EN

Stack Overflow用户

发布于 2017-01-09 11:10:17

由于ruby 2.4.0,您可以使用本机Hash#transform_values方法:

代码语言:javascript
复制
hash = {"a" => "b", "c" => "d"}
new_hash = hash.transform_values(&:upcase)
# => {"a" => "B", "c" => "D"}

还有破坏性的Hash#transform_values!版本。

票数 113
EN

Stack Overflow用户

发布于 2011-09-10 02:25:16

您可以收集这些值,并再次将其从Array转换为Hash。

如下所示:

代码语言:javascript
复制
config = Hash[ config.collect {|k,v| [k, v.upcase] } ]
票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/812541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档