C#でのリストの配列について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tetsu

C#でのリストの配列について

#1

投稿記事 by tetsu » 11年前

これまではC++を使用していましたが最近C#を勉強しています
C++とのリストと配列の操作について質問があります

C++では

コード:

vector<int> vect[3];
vect[0].push_back(2);
0番目のvector型vect内にint型の2を加えます

これをC#で実装する場合

コード:

List<int>[] list = { new List<int>(), new List<int>(), new List<int>()};
list[0].Add(2);
と現在は実装していますが、以下のように

コード:

List<int>[] list = new List<int>[3]();
まとめてnewすることはできませんか?
また、

コード:

int number = 3;
List<int>[] list = new List<int>[number]();
といったこともしたいと考えています

もしこれらが出来ないならば、

コード:

List<List<int>> list = new List<List<int>>();
for(int i=0;i<3;i++) list.Add(new List<int>());
list[0].Add(2);
といったリスト内リストを作成しなければならないのでしょうか?

アバター
海Sea
記事: 102
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: C#でのリストの配列について

#2

投稿記事 by 海Sea » 11年前

配列の初期化は、基本的に型指定の後ろに、
数を指定するので、クラスの配列の場合は、

コード:

List<int>[] list = new List<int>[3];
という感じで、大丈夫なはずです。
が、これだと配列の要素を確保しているだけです。
各配列のListのインスタンスを、
結局生成しないと使用することができません。
List内Listを作成するのと手間自体は余り変わりは無い気がします。

余談ですが、C#の基本から学ぶなら、こちらのサイトは有用です。
http://ufcpp.net/study/csharp/index.html

tetsu

Re: C#でのリストの配列について

#3

投稿記事 by tetsu » 11年前

返信ありがとうございます

確保をした後にListのインスタンスを生成しなければならないのですね

コード:

List<int>[] list = new List<int>[3];
for(int i=0;i<3;i++)list[i] = new List<int>();
といった処理でしょうか?
固定長であることを除けばList内Listと大きな差異は感じられません

教えていただいたサイトはいつも参考にしていますが条件や配列などの基本的な部分は読み飛ばしていました
もう一度勉強してみます

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: C#でのリストの配列について

#4

投稿記事 by YuO » 11年前

C#での

コード:

List<int> list;
は,C++での

コード:

std::vector<int> *list
に,

コード:

List<int> list[];
は,C++での

コード:

std::vector<int> **list
に相当します。
C#の参照型は,C++に書き直すとポインタになると思ってよいです (配列:System.Array含む)。

また,std::listに相当するのはSystem.Collections.Generic.LinkedListで,Listはstd::vectorに相当します。


で,インスタンス生成については,System.Linq.Enumerable.RangeとEnumerable.SelectとEnumerable.ToArrayを使って,

コード:

var list = Enumerable.Range(0, 3).Select(n => new List<int>()).ToArray();
と書くことができます。
実行時効率は配列をnewして一個一個List<int>をnewした方がよいですが……。
オフトピック
Range+SelectのかわりにEnumerable.Repeatを使ってしまうと,配列要素がすべて同一インスタンスになってしまい,バグの元なので注意

tetsu

Re: C#でのリストの配列について

#5

投稿記事 by tetsu » 11年前

なんとなくポインタっぽいと思ってはいましたが確かに参照型なのでポインタに近いですね

LINQはC#の特徴であり便利そうなので重点的に勉強してみます

ありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る