C# 配列(Array)とList型について

タグの編集
投稿者 ケンケン  (社会人) 投稿日時 2022/8/2 10:01:04
            //配列の生成
            string[] name = new string[] { "東京", "品川", "新横浜", "名古屋", "京都", "新大阪" };

            //配列を配列に変換 
            string[] tab = name.ToArray();

           //配列をList型に変換
            List<string> tab1 = name.ToList();

           今は、6個のデータですがもし大量データを変換した場合
     どちらの変換を使用すべきですか?
      何方かわかる方、ご教授お願い致します。
      いつもスッキリしません。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/8/2 10:40:21
> 配列を配列に変換 
それはいったい、何のための変換ですか?

日本円を日本円に<両替>しているかのような違和感が…。


> 大量データを変換した場合
> どちらの変換を使用すべきですか?
重要なのは、「何のために変換したいのか」でしょうね。
まずは目的を明確にしてみてください。


たとえばデータの挿入や削除が頻繁になるのなら、配列ではなく List の方がずっと良いでしょう。
一方、固定データである場合は、列挙速度で言えば一次元配列に僅かに軍配があがります。

単に、IEnumerable<> を受け取るメソッドに渡すような時は、
そもそも変換自体が不要というケースもあります。

あるいは、加工無しでの部分抽出である場合は、C# 7.2 以降で Span<> を用いて、
元データのビューを取り出した方が、遥かに効率的となりえます。
https://docs.microsoft.com/ja-jp/dotnet/standard/memory-and-spans/
投稿者 ケンケン  (社会人) 投稿日時 2022/8/2 11:15:46
誤解を招く書き方でした。
変換は余計でした。
(;^ω^)
配列とlist型は同じ配列なので
余り考えないで使っていました。
色々を参考になりました。
ありがとうございます。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2022/8/2 11:59:58
.NET の世界では、一次元配列は特別なものとして扱われていて、
効率よく扱えるようになっています。
多次元配列は扱い辛いので個人的にはお奨めしませんが。


参考情報としてこのあたりも。
https://neue.cc/2011/08/03_336.html
https://qiita.com/Zuishin/items/36a2cf3e12bbedbfb61e
https://shibuya24.info/entry/2017/05/02/000800


> 配列とlist型は同じ配列なので
list ではなく List ですけれどね。
C# を使うなら大文字小文字も正確に…! (VB なら良いですが)

でもって List<T> 型は、内部的には「一次元配列」でデータを保持していたりします。

.NET 版の List<T> 実装
https://source.dot.net/#System.Private.CoreLib/List.cs,cf7f4095e4de7646

.NET Framework 版 の List<T> 実装
https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,cf7f4095e4de7646
投稿者 ケンケン  (社会人) 投稿日時 2022/8/2 13:22:40
C# はまだ初心者レベルです。
ネットで知識を吸収したと思います。
参考になりました。
ありがとうございます。