C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

リストを編集後同じリストに代入することについて

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■85164 / inTopicNo.1)  リストを編集後同じリストに代入することについて
  
□投稿者/ lan (1回)-(2017/09/15(Fri) 23:23:11)

分類:[.NET 全般] 

Linqでリスト(変数A)の中身を並び替えた後、そのリストを同じ変数Aに入れるのはパフォーマンス的になにか問題がありますでしょうか?
引用返信 編集キー/
■85165 / inTopicNo.2)  Re[1]: リストを編集後同じリストに代入することについて
□投稿者/ WebSurfer (1307回)-(2017/09/15(Fri) 23:45:38)
No85164 (lan さん) に返信

もっともっと具体的に書かないと、回答を得るのは難しいと思うのですが・・・
引用返信 編集キー/
■85169 / inTopicNo.3)  Re[2]: リストを編集後同じリストに代入することについて
□投稿者/ ぶなっぷ (127回)-(2017/09/16(Sat) 10:22:11)
情報が少ないんで、いろいろ仮定で話します。

var DataAList = new List<DataA>();
というListがあるとき、

DataAList = from x in DataAList orderby x.FieldA select x;
というような処理をした場合の話かな?

まず、これは試してみればすぐ分かるけど、
そのままではコンパイルエラー。

なぜなら、LINQ の戻り値の型は、IOrderedEnumerable で
そのままでは、List に代入できないから。

DataAList =
    (from x in DataAList orderby x.FieldA select x).ToList();
でコンパイル通るけど、

ToList()すると、Listデータの箱を作りにいくので、
その分、メモリロスとタイムロスが発生。

DataAがクラスなら、Listデータの箱は参照アドレスを入れる箱なので
たいしたことないですが、大きな構造体だったりすると、結構なロス
になります。

ソート結果で、ループ処理を回したいだけなら、
IOrderedEnumerable のまま持ち回れば、余計なロスは発生しません。

引用返信 編集キー/
■85172 / inTopicNo.4)  Re[3]: リストを編集後同じリストに代入することについて
□投稿者/ lan (3回)-(2017/09/16(Sat) 12:27:20)
No85169 (ぶなっぷ さん) に返信

> DataAList =
> (from x in DataAList orderby x.FieldA select x).ToList();
上記のような事であっています。
> ソート結果で、ループ処理を回したいだけなら、
> IOrderedEnumerable のまま持ち回れば、余計なロスは発生しません。

リストに入れなおさないと結果が反映されないと思っていたのですが、
ループの段階で並び変えが実行されることはわかっていませんでした。
上記の方法でやってみたいと思います。
ありがとうございますm(__)m

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ