4

現在、共通の値を含む2つの異なるハッシュを使用しており、ハッシュキー名を正規化したいと思います。

ハッシュ#1は次のようになります。

files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]

ハッシュ#2は次のようになります。

files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]

キーが「file」と「dir」ではなく「filename」と「path」になるように、ハッシュ#2をループして新しいハッシュを作成する方法はありますか?

4

2 に答える 2

7

キーを新しいキーに置き換えるだけです。

files["path"] = files.delete("dir")

delete削除された値を返すため、現在の状態を効果的移動できfiles['dir']ますfiles['path']

Rubyには、2つの配列に対してこのプロセスを自動化する魔法の方法はありません。最初の値をループし、2番目の値を見つけて、上記のdelete操作を実行する必要があります。

files1.each do |key,value|
  if old_key = files2.key(value)
    files2[key] = files2.delete(old_key)
  end
end

キーがすでに2番目の配列にある場合、これは値を上書きする可能性があります。のすべての値がにあることが確実な場合はfiles1files2ifステートメントをスキップしてfiles2[key] = files2.delete(files2.find(value))、ループ内で使用できます。

于 2012-10-25T04:11:07.407 に答える
0

これを試して:

files1.concat(files2.map { |old_hash| 
    { 
        "filename" => old_hash["file"], 
        "path" => old_hash["dir"]
    }
})
于 2012-10-25T04:41:35.990 に答える