在 Ruby 中更新哈希键的惯用方法是啥?
Posted
技术标签:
【中文标题】在 Ruby 中更新哈希键的惯用方法是啥?【英文标题】:What is an idiomatic way to update hash keys in Ruby?在 Ruby 中更新哈希键的惯用方法是什么? 【发布时间】:2013-11-07 17:47:01 【问题描述】:在遍历哈希时,无法更改键。假设您要为每个键添加“_new”:
hash = 'a' => 1, 'b' => 2
new_pairs = Hash.new
hash.each do | k,v |
new_pairs[ k + '_new' ] = v
hash.delete k
end
hash.merge! new_pairs
有没有一种更干净、更惯用的类似 ruby 的方式来做到这一点?
【问题讨论】:
【参考方案1】:您不需要就地突变 (merge!
)。我会做这样的事情:
hash = 'a' => 1, 'b' => 2
hash2 = Hash[hash.map|k, v| [k + '_new', v] ]
hash2 # => "a_new"=>1, "b_new"=>2
【讨论】:
@BSeven:是的,没错。【参考方案2】:您不能在修改哈希时直接迭代它,但您可以迭代 keys
。
hash.keys.each|k| hash["#k_new"] = hash.delete(k)
【讨论】:
在筛选我可能会在您的解决方案中使用的各种形容词时,我选择了“可爱”。 (很好。) 是的,非常可爱。【参考方案3】:任君挑选!
hash = hash.keys.reduce() |h,k| h[k + '_new'] = hash[k]; h
【讨论】:
【参考方案4】:hash.map |k, v| "#k_new" => v .reduce(:merge)
【讨论】:
【参考方案5】:我会这样做:
hash = 'a' => 1, 'b' => 2
nw_hash = Hash.new |hsh, key| hsh[key+'_new'] = hash[key]
hash.keys.each|e| nw_hash[e]
nw_hash
# => "a_new"=>1, "b_new"=>2
【讨论】:
以上是关于在 Ruby 中更新哈希键的惯用方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
将 json 格式的键值对转换为以符号为键的 ruby 哈希的最佳方法是啥?
在 scala.immutable.Map 中更新多个值的惯用方法