[解決済み】Rubyでハッシュをコピーする方法は?
2022-04-09 18:29:28
質問
私はrubyの初心者です(今はrakeスクリプトを書いています)。ほとんどの言語では、コピーコンストラクタは簡単に見つけることができます。30分検索しても、rubyでは見つかりませんでした。私はハッシュのコピーを作成し、元のインスタンスに影響を与えることなくそれを変更できるようにしたいです。
意図したとおりに動作しない期待されるメソッドもある。
h0 = { "John"=>"Adams","Thomas"=>"Jefferson","Johny"=>"Appleseed"}
h1=Hash.new(h0)
h2=h1.to_hash
とりあえず、このような不格好な回避策に頼りました。
def copyhash(inputhash)
h = Hash.new
inputhash.each do |pair|
h.store(pair[0], pair[1])
end
return h
end
解決方法は?
その
clone
メソッドは、Ruby の標準的なビルトイン方法で
シャローコピー
:
irb(main):003:0> h0 = {"John" => "Adams", "Thomas" => "Jefferson"}
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):004:0> h1 = h0.clone
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):005:0> h1["John"] = "Smith"
=> "Smith"
irb(main):006:0> h1
=> {"John"=>"Smith", "Thomas"=>"Jefferson"}
irb(main):007:0> h0
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
なお、この動作はオーバーライドすることができます。
このメソッドは、クラス固有の動作を持つことがあります。もしそうであれば、その動作は
#initialize_copy
メソッドを使用します。
関連
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] scpを使ってリモートからローカルにフォルダをコピーするにはどうしたらいいですか?
-
[解決済み] 割り当て後にリストが予期せず変更されました。その理由と防止策を教えてください。
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] JavaScriptのオブジェクトを表示するにはどうすればよいですか?
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] ディープコピーとシャローコピーの違いは何ですか?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Aptana Studio 3.6をWindowsにインストールできない
-
[解決済み] RubyのNameError
-
[解決済み] ルビーオールウェイズ ラウンドアップ
-
[解決済み] Rubyでnil値をマッピングして削除する方法
-
[解決済み] ルビーです。そのようなファイルやディレクトリはありません @ rb_sysopen - testfile (Errno::ENOENT)
-
[解決済み] Rubyでランダムな文字列を生成する方法
-
[解決済み] レイルズ・ジェネレート」を逆手に取る方法
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] OpenSSL AES-256-CBC 暗号化エラー、"間違った最終ブロック長" Ruby
-
[解決済み】Rubyのdupメソッドとcloneメソッドの違いとは?