辞書のコピーを取りたい

投稿者: 投稿日:2018/08/26(Sun) 00:20:02 No.2208

 こんにちは、お世話になります。

 辞書を作り、以前の内容と新しい内容を比較しようとしているのですが、辞書のコピーがうまくいかず、バックアップした辞書が新しい辞書の内容に変わってしまいます。
 配列にある「クローン」のような機能を実現する方法はありますでしょうか。
 とりあえず、今のところのサンプルソースです。

--------------------
辞書は、辞書を作ったもの
辞書(「id」)は、1
辞書(「value」)は、「テスト」
辞書バックアップは、辞書
辞書(「id」)は、2
辞書(「value」)は、「テスト2」
辞書の内容を表示
辞書バックアップの内容を表示
辞書バックアップ(「id」)を表示
--------------------

 何かアドバイスをいただけると幸いです。

 よろしくお願いいたします。

「辞書化する」手順を使ってください

投稿者:ゆうと 投稿日:2018/09/01(Sat) 22:20:37 No.2212

こんにちは ゆうとです。

辞書には、「クローン」手順がありませんが、「辞書化する」手順で代用できます。
コピー元の辞書の内容を文字列にした上で、それを「辞書化する」手順を使って新しい辞書として作ることで、辞書がコピーできます。

なお、参考に挙げてあるプログラムについてですが、
種類と変数を同じ名前にすると、混乱やミスの原因になります。正しく動作しますがおすすめできません。
変数名には、辞書Aや辞書2など、種類の名前とは区別した名前を付けることをおすすめします。

--------------------
辞書Aは、辞書を作ったもの
辞書A(「id」)は、1
辞書A(「value」)は、「テスト」

辞書Aの内容を辞書化して辞書Aバックアップとする

辞書Aバックアップ(「id」)は、2
辞書Aバックアップ(「value」)は、「テスト2」
辞書Aの内容を表示
辞書Aバックアップの内容を表示
辞書Aバックアップ(「id」)を表示
--------------------

辞書に配列が含まれている場合の処理について

投稿者: 投稿日:2018/09/01(Sat) 22:47:38 No.2213

 こんにちは、お世話になります。

 なるほど、「辞書化」を使えばいいんですね。

 早速試してみたんですが、辞書に配列が含まれていると、うまく動かないようです。
 下記のソースコードでは、辞書のvalueを表示させようとしていますが、何も表示されないようです。
 何か解決法はありますでしょうか。

--------------------
辞書Aは、辞書を作ったもの
辞書A(「list」)は、配列を作ったもの
登録辞書は、辞書を作ったもの
登録辞書(「id」)は、1
登録辞書(「value」)は、「テスト1」
登録辞書を辞書A(「list」)へ追加する
登録辞書は、辞書を作ったもの
登録辞書(「id」)は、2
登録辞書(「value」)は、「テスト2」
登録辞書を辞書A(「list」)へ追加する
辞書Aバックアップは、辞書Aの内容
辞書Bは、辞書Aバックアップを辞書化
辞書B(「list」)を処理内容へそれぞれ繰り返す
処理辞書、処理内容を辞書化
処理辞書(「value」)を表示
繰り返し終わり
--------------------

 以上、よろしくお願いいたします。

Re: 辞書に配列が含まれている場合の処理について

投稿者:通りすがり 投稿日:2018/09/02(Sun) 14:31:58 No.2217

基本的に、辞書や配列の内容が、複製可能かどうかは、それを利用するアプリケーションに依存するため、汎用的な方法はありません。
いわゆる、値型は、単純にコピーできますが、参照型はケースバイケースになります。
(今回は、辞書に配列という参照型を入れているケースです)
うまくゆかない例は
・ファイル型など、コピーできないものを格納している
・1つの実態への複数の参照を持っている
・循環参照している
これらを確実にコピーする方法はなく、アプリケーション毎にどうしたいのかにあわせて、自分でじっそする必要があります。逆に、これらをチェックしながらコピー(クローン)するように実装するのも、難しいということになります。
----
Aという辞書を作る
Bは、{1,2,3}
A(「あ」)は、B
A(「い」)は、B
---
という場合、汎用的にBの実態を正しく戻すには、辞書内のすべての値について、他の値と同じ実態かどうかを総当たりで調べなくてはならくなります。が、多くの場合、それはコストの高い、無駄なチェックになります。

基本的には、配列や辞書などのコンテナのクローンは、自身で実装する方針をお勧めします。
(文字列や数字の配列とか、文字と数字のみを使用した辞書だけ、ちょっと楽ができる ぐらいの感覚が良いかと思います)

ありがとうございました

投稿者: 投稿日:2018/09/08(Sat) 09:47:13 No.2224

 こんにちは、お世話になります。

 やはりそうですか。
 ありがとうございました。

 今後ともよろしくお願いいたします。

▲ページの先頭へ

- WebForum -