簡體   English   中英

在Ruby中更新哈希鍵的慣用方式是什么?

[英]What is an idiomatic way to update hash keys in Ruby?

遍歷哈希時,不能更改鍵。 假設您要向每個鍵添加“ _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

有沒有更清潔,更慣用的紅寶石方式呢?

您不需要就地突變( merge! )。 我會做這樣的事情:

hash = { 'a' => 1, 'b' => 2 }

hash2 = Hash[hash.map{|k, v| [k + '_new', v] }]

hash2 # => {"a_new"=>1, "b_new"=>2}

您不能在修改哈希時直接迭代哈希,但可以在keys迭代。

hash.keys.each{|k| hash["#{k}_new"] = hash.delete(k)}

隨便你!

    hash = hash.keys.reduce({}) {|h,k| h[k + '_new'] = hash[k]; h}   
hash.map { |k, v| {"#{k}_new" => v} }.reduce(:merge)

我會做如下:

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}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM