在 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 中更新多个值的惯用方法

ReactJS:通过表单获取和更新数据的惯用方式是啥?

在Javascript中更新对象数组中的键的最有效方法是啥? [复制]

遍历 Perl 哈希键的最安全方法是啥?

从 Perl 中的哈希中获取具有最高值的键的最简单方法是啥?