問題タブ [deep-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
3010 参照

delphi - R1:=R2 を含むレコードのディープ コピー、またはレコードを使用して NxM マトリックスを実装する良い方法はありますか?

以下のように、レコードと内部動的配列を使用して N x M マトリックス (クラス) を実装しています。

レコードを作成/解放/割り当てて使用したくないので、レコードを選択します。

しかし、動的配列では、値は M1.Assign(M2) の代わりに M1 := M2 で (ディープ) コピーできません。

自己暗黙的な変換メソッドを宣言しようとしましたが、M1:=M2 には使用できません。

(Implicit(const pA: PMat): TMat と M1:=@M2 は機能しますが、かなり醜くて判読できません..)

レコードの割り当てをフックする方法はありますか?

または、レコードで N x M マトリックスを実装する提案はありますか?

前もって感謝します。

編集:

Barry の方法で以下のように実装し、正常に動作することを確認しました。

効率的ではないことに同意します。純粋なレコードで割り当てを使用するだけで、絶対に高速になります。

しかし、それはかなり便利で読みやすいです.(そして興味深い. :-)

軽い計算や試作前の試作に重宝すると思います。ではない ?

編集2:

kibabは、動的配列自体の参照カウントを取得する関数を提供します。

Barry のソリューションは、内部 impl からより独立しており、今後の 64 ビット コンパイラでも変更なしで動作する可能性がありますが、この場合、シンプルで効率的な kibab を好みます。ありがとう。

0 投票する
2 に答える
5036 参照

java - 線形リンクリストのディープコピー

ノードで構成される線形リンクリストがあります。

リストの深いコピーを作りたい。次に、元のリストの各ノードをインクリメントし、両方を印刷します。コードが正しいかどうかわかりません。

... 2番目のprintlnに123しか与えられませんが、コピーに問題があります。何か案は?

アップデート:

0 投票する
8 に答える
2819 参照

java - 線形連結リストを反転

線形連結リストはノードのセットです。ノードは次のように定義されます (わかりやすくするために、ノードとリストを区別しません)。

リストのディープコピーを作成できます。ここで、リストを反転して、最初のノードが最後になり、最後が最初になるようにします。インバーテッド リストはディープ コピーである必要があります。

反転機能の開発を開始しましたが、よくわかりません。何か案は?

更新:線形リンクリストは再帰的なデータ構造であるため、再帰的な方法があるかもしれません。

最初の要素を取得し、子を持たないノードに到達するまでリストを繰り返し処理し、最初の要素を追加します。これを 2 番目、3 番目の要素について繰り返します....

0 投票する
1 に答える
418 参照

objective-c - Objective-C:オブジェクトのツリーをリモート分散オブジェクトに渡す方法は?

パラメータのセットと subNodes と呼ばれる NSMutableArray を含む Node というクラスがあります。1 つのプロセスが 1 つの Node オブジェクトをツリーのルートとして作成し、subNodes 配列を使用して Node の大きなツリーを作成します。このツリー全体を別のプロセスに渡す必要があるため、NSConnection をセットアップします。

通信自体は機能し、ルート ノードが呼び出されることを期待するリモート メソッド 'setNodeTree' が呼び出されます。ただし、ツリーの転送は機能しません。Node クラスの copyWithZone メソッドを実装する必要がありました。

ただし、クライアントは次の例外で終了します。

ここで何がうまくいかなかったのでしょうか?どうやら BOOL 変数がどこかで予期されているようですが、ノードには何も含まれておらず、BOOL を予期または返すメソッドが使用されていません。

0 投票する
3 に答える
2330 参照

c# - C#でデータを適切にコピーする

私はC#でいくつかのシミュレーションコードに取り組んでおり、次の行に沿っていくつかのコードがあります。

ここで、位置、速度、加速度は、関連する演算子で定義したいくつかのベクトルデータ型です。

私がやっているコードと同様に:

* Pointsは、いくつかのプリミティブ(double)および非プリミティブ(Vector)データ型を持つPointsのインスタンスです。

上記のコードは、以前はEndPointであったデータを指すようにStartPointを設定するだけで、EndPointはCurrentPointを指すようになるという(明らかな)問題が発生しています。

つまり、CurrentPointを再度変更すると、誤ってEndPointを変更してしまうことになります。

C ++では、Pointオブジェクト内の基になるデータのディープコピーを実行するように代入演算子を定義できるため、これを簡単に防ぐことができます。C#でこれを防ぐにはどうすればよいですか?

助けてくれてありがとう!

編集:Vectorクラスは次のように定義されます

0 投票する
4 に答える
33755 参照

c++ - C++ での strcpy の代替

Cでは、文字列のディープ コピーstrcpyを作成していましたが、C++ で使用しても「問題ありません」か、代わりに使用すべきより良い代替手段がありますか?strcpy

0 投票する
3 に答える
4842 参照

c++ - 抽象基底クラスのオブジェクトのコピーを作成する

抽象基本クラスから派生したオブジェクトへのポインターがあり (そのため、そのクラスの新しいオブジェクトを作成できません)、そのオブジェクトのディープ コピーを作成したい場合、それを達成するためのより簡潔な方法はありますか?抽象基本クラスcopyに、すべての継承クラスを実装する必要がある新しい純粋仮想関数を作成させるには?

0 投票する
3 に答える
2827 参照

linq - 返品を作成するときにLINQの新しいメモリが追加されますか

LINQ は実際に結果のディープ コピーを別のリスト/配列/etc に実行しますか、それとも単純にリスト/配列/etc を提供しますか? オリジナルへの参照で構成されていますか?

0 投票する
2 に答える
1901 参照

python - リストの乗算によって作成されたネストされた参照リストのディープコピーは機能しません

私はPythonが大好きですが、リファレンスやディープコピーのものは時々私を驚かせます。

ここでディープコピーが機能しないのはなぜですか。

とにかく後で必要になる回避策として、numpy配列を使用しています。しかし、ディープコピーを使用すれば、意図しない参照を追跡する必要がなくなることを本当に望んでいました。それが機能しないトラップは他にありますか?

0 投票する
4 に答える
1218 参照

java - Java オブジェクトのディープ クローニング (Bean ではない)

私が現在取り組んでいるプロジェクトには、既存のオブジェクトのディープ コピーを取得するためにシリアル化された多くのオブジェクトがあります。これは、コンポーネント間で 100、200、または 1000 の呼び出しがある場合に、実行時に複数の呼び出しが発生するまでは正常に機能し、これがパフォーマンスの頭痛に見舞われる場所です。

これらのオブジェクトをクローンとしてコピーする歴史的な理由は、異なる機能の下で同じオブジェクトで動作する 2 つの異なるコンポーネントが互いに変更されるべきではないことです。たとえば、Swing UI の変更は、保存または同期ボタンが押されるまでバックエンドのオブジェクト値を変更してはなりません。

私たちにはかなり大きなコード ベースがあります。リフレクションに基づいてクローンを記述すれば、シリアル化に比べて高速に動作すると思いましたが、オブジェクトの複雑な階層またはその他の理由により、このアプローチはさらに遅くなります。

CloneUtils (sourceforge プロジェクト) も使用してみましたが、これも低速です (Hibernate はまったく使用していません)。Spring BeanUtils はオプションではありません (ドキュメントから、Bean のみを使用すると想定しています。

別のコピーで作業しながら、パフォーマンスを向上させます。シリアライゼーションの代わりに独自のコピー メソッドを提供する場合に高速化するオプションがありますが、これには、これらのメソッドを毎回更新するという欠点があり、忘れると機能が失われる可能性があります。