1. ホーム
  2. collections

[解決済み] Dartでリスト、マップ、セットのクローンを作成する

2022-09-02 13:40:51

質問

Java のバックグラウンドから来たものですが、Dart をクローンする推奨される方法は何ですか? List , MapSet ?

どのように解決するのですか?

使用方法 clone() の使用は、Javaではトリッキーで疑問の多い 1,2 . 効果的に clone() はコピーコンストラクタであり、そのために Dart の List , MapSet タイプはそれぞれ という名前のコンストラクタがあります。 という名前の .from() を実行する 浅いコピー 例えば、次のような宣言があるとします。

  Map<String, int> numMoons, moreMoons;
  numMoons = const <String,int>{ 'Mars' : 2, 'Jupiter' : 27 };
  List<String> planets, morePlanets;

を使うことができます。 .from() のようにします。

  moreMoons = new Map<String,int>.from(numMoons)
    ..addAll({'Saturn' : 53 });
  planets = new List<String>.from(numMoons.keys);
  morePlanets = new List<String>.from(planets)
    ..add('Pluto');

なお List.from() はイテレータを使うことができます。 List .

完全を期すため、ここで言及するのは dart:html Node クラスが定義する clone() メソッドを定義しています。


1 J. ブロッホ、" 効果的なJava " 第2版, 項目11.

2 B. ヴェナーズ、" Josh Bloch、デザインについて。コピー コンストラクタとクローン 2002年 . ここから参照 3 . 記事からの引用です。

<ブロッククオート <ブロッククオート

私の本の中のクローンに関する項目を読んだなら、特に行間を読めば、私がクローンは深く壊れていると考えていることがわかるだろう。---J.Bloch

3 Dart Issue #6459, インスタンス(オブジェクト)のクローンを作成します。 .