immutableMap: Map<String, Int>
があり、それをmutableMap: MutableMap<String, Int>
に変換したい場合、それを行うにはどうすればよいでしょうか?便利な方法のようには見えません。不変のマップをコピー可能な地図にコピーする
8
A
答えて
6
Map
をMutableMap
にコピーすると、次の拡張機能が動作します。 Kotlinが唯一のコレクションとその不変性を読まについて、前の質問で取り上げとして
fun <K, V> Map<K, V>.toMutableMap(): MutableMap<K, V> {
return HashMap(this)
}
9
まず、彼らは本当に唯一可能性の高い可変コレクションの景色を生きて読み込まれます。 Kotlinが知っているインターフェイス上のマーカーがあるので
Kotlinは無事例えば、これらのための可変性のためのタイプを確認することができます。
は// assuming some variable readOnlyMap of type Map<String, String>
val mutableMap: MutableMap<String, String> = if (readOnlyMap is MutableMap<*,*>) {
readOnlyMap as MutableMap
} else {
HashMap(readOnlyMap)
}
このis
チェックは内部でTypeIntrinsics.isMutableMap
を呼び出しへの有効な方法です。キャスタブルかどうかを知る。このチェックを最初に行うと、キャストに危険はありません。コンパイラは完全に幸せであり、警告なしであることに注意してください。これは、読み込み専用として扱われる同じマップを変更するつもりはないが、影響のためにキャストできることを示している場合、危険です。
元のマップを変更したくない場合は、もちろん、別のマップHashMap(readOnlyMap)
でHashMapのコンストラクタを呼び出すだけで、常にコピーを作成できます。または拡張機能します:
fun <K, V> Map<K, V>.toMutableCopy() = HashMap(this)
をし、それを呼び出す:
val mutableMap = readOnlyMap.toMutableCopy()
そして今、あなたの簡単な方法があります。
も参照してください:
関連する問題
- 1. コピー可能なオブジェクト、マップ、shared_ptr:コピーコンストラクタのエラー
- 2. 変更不可能なリストをクローン/コピーする
- 3. C++ SFMLコンパイルエラーSF ::コピー不可::コピー不可(constのSF ::コピー不可&)は
- 4. UILocalNotification - 変更可能なコピー
- 5. 不可能なコピー対同期
- 6. スマートポインタとコピー不可能なメンバフィールド
- 7. コピー不可能な要素のコンテナを作成する方法
- 8. 変更不可能なマップを返す
- 9. コピー不可能な機能を持つインターフェイス
- 10. 選択不可能とコピー不可テキストHTML
- 11. std :: vector :: push_backコピー不可能なオブジェクトでコンパイルエラーが発生する
- 12. Abcpdfコピー可能/選択可能なテキスト
- 13. は非コピー可能なタイプ
- 14. 変更不可能なオブジェクトの可変コピーを作成するための好ましい方法は?
- 15. GoogleマップV3:地図のドラッグ地図のドラッグ&ズーム後に不正な位置に画像が表示される
- 16. はなぜ後押し::コピー不可クラス
- 17. スクロールビューがスクロール可能でない地図
- 18. 地図をコピーする[文字列、リスト[MyObject]]スカラー
- 19. 不可能なコピーが動作しません
- 20. コピー不可能なクラスを作成してクラスに継承する
- 21. ラベルをコピー可能にする
- 22. 変更可能なスカラ不変マップ、いつ変更可能ですか?
- 23. 番号付きのコピー可能なコピーまたはテンプレート
- 24. 明示的なコンストラクタを使用してコピー不可能なオブジェクトを返す
- 25. のstd ::コピー不能のためのタプルと非可動オブジェクト
- 26. 機能について「地図を取得する」Googleマップandroid
- 27. は、私のような地図に変換したいマップ
- 28. ビン地図内のクリック可能/カスタムプッシュピン
- 29. Scalaの地図反復可能
- 30. カスタムデストラクタで非コピー可能
私はあなたがHashMapのジェネリックスを明示的に指定する必要があると思います。そうしないと、プラットフォームキー/値型のマップになります。 –
実際には変更できないJavaコレクションに対して 'true'を返すことができるので、私は' MutableMap'チェックに対してアドバイスします。たとえば、 'Collections.unmodifiableMap(mutableMapOf(" a "から" b "))はMutableMap <*,*>'です。 –
これは私にとって最善の答えのようです。あなたが追加するかもしれない1つの例は 'HashMap'を直接使用しない例です(' mutableMapOf'は実際に 'LinkedHashMap'を使用します)。例: 'val mutableMap = map.entries.associateTo(mutableMapOf()){entry-> entry.toPair()}'。 – mfulton26