RubyのMarshalによる配列やハッシュのディープコピー

タグ: ruby / 公開: 2014-05-18

RubyでmarshalライブラリのMarshal.dumpMarshal.loadを使えば、Rubyの配列やハッシュを簡単にディープコピーすることができる。以下はそのサンプルコード。

a = ['foo', 'bar', 'baz']
b = Marshal.load(Marshal.dump(a)) # Marshalによるディープコピー

a.map!{|i| i.upcase } # 元の配列を破壊的に変更

p a #=> ["FOO", "BAR", "BAZ"]
p b #=> ["foo", "bar", "baz"]

複雑に組み合わさった配列やハッシュでも全く同じ方法でディープコピーできるため、自力でディープコピーの処理を実装するよりかなり簡単である。

もともとシリアライズの機能を提供するmarshalライブラリをこんな形で使うというのは少々トリッキーではあるが、テクニックといえばテクニックかも知れない。

Rubyレシピブック 第3版 303の技
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンククリエイティブ
売り上げランキング: 284,046
この記事をSNSでシェアする
タイトルとURLをコピーする
または投稿画面を開く
Author
Icon
ぺけみさお / xmisao
プログラマ。
Subscription
Recent articles
Related to ruby