Listのコピー – プログラミング – Home

通知
すべてクリア

[解決済] Listのコピー


toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 37
Topic starter  

Listのコピーを模索してます。
(浅いコピーと深いコピー)

最後のlist1をコピーするのですが、最後のClear()メソッドで
コピー先に影響が受けないようなコピーを行います。

List<string> list1 = new List<string>();
list1.Add(111);
list1.Add(222);

List<string> list2;
list2 = list1;

string[] list3 = list2.ToArray();

List<string> list4 = new List<string>();
foreach (string str in list1)
{
list4.Add(str);
}

list1.Clear();

list2は、Clearされてしまうので×
list3は、配列に変換されている。
list4は、foreachでぐるぐるまわす手間がある。

JavaだとListのコピーは、clone()メソッドで一発ですが
.NETでは、list3かlist4の方法でしょうか?


引用未解決
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

シャローコピー と ディープコピーのことですね。

とりあえず、
>string[] list3 = list2.ToArray();
ではなく

List<string> list3 = new List<string>(list2.ToArray());

ですかね。(未確認)


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 37
Topic starter  

>List<string> list3 = new List<string>(list2.ToArray());
これ確認しました。

これが、ベストっぽいですね。1行で書けるし。Listは、コンストラクタに配列を取れる
んですね。
これでいこうと思います。ありがとうございます。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 22年前
投稿: 320
 

解決されていますが……

> List<string> list3 = new List<string>(list2.ToArray());

List<string> list3 = new List<string>(list2);
でよいかと。
どちらにしても,IEnumerable<T> collectionを引数に取るコンストラクタを使うわけで
すし。


返信引用
toru
 toru
(@toru)
ゲスト
結合: 23年前
投稿: 37
Topic starter  

>List<string> list3 = new List<string>(list2);
さらにベストがありましたね。
コンストラクタの引数には、IEnumerable<T>を実装しているものならいいんですね。

コードは短かくて、単純なほどいいです。ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました