0

複製

C# での長さが不明な配列

長さを初期化せずに string[] を初期化するにはどうすればよいですか? 動的配列にしたいので、何かを追加すると、長さが増加し、例外は発生しませんか?

ある種のリストを使用する必要がありますか?

4

7 に答える 7

6

不明な長さの配列が必要な場合は、名前空間stringsの a を使用します。List<T>System.Collections.Generic

List<string> myList = new List<string>();
myList.Add("First");
myList.Add("Second");
myList.Add("Third");
myList.Count // = 3

これは、固定サイズの配列を舞台裏で使用しますが、配列が大きくなり、スペースがなくなるとすべての要素を移動するという事実を隠します。

于 2009-04-04T01:51:07.553 に答える
3

List<T>はあなたが望むことをします。これには、アイテムの追加が完了したときに配列を返すToArray()メソッドがあります (まだ配列が必要な場合)。

于 2009-04-04T01:51:55.027 に答える
1

そこにある多くの言語は、配列全体をブロックとして事前に割り当てると思います。この機能を提供するラッパー クラスを使用する必要がある場合があります。Java や C++ などの言語が指定されていない場合、int[] はメモリの連続したブロックになります。新しいブロックを割り当てて古い内容をコピーするか、これを管理するラッパーを使用して、同じことを行うか、オブジェクトへのポインターを使用する必要があります。それは Java の ArrayList などになります。

于 2009-04-04T01:44:19.723 に答える
1

ほとんどの言語では、配列は固定長です。動的な長さが必要な場合は、リストのような動的データ型を使用する必要があります。

言語がリストをネイティブにサポートしていない場合、通常は配列で実装されます。内容が長くなりすぎて配列に収まらない場合は、より長い配列が割り当てられ、内容が古い配列から新しい配列にコピーされ、最後に古い配列が解放されます。

あなたの言語またはそのライブラリの 1 つに動的な長さの型があると確信しています。

アップデート

C# の場合、コレクション クラスはSystem.Collections名前空間にあります。System.Collections.Generic可能であれば、ジェネリック クラスに注目する必要があります。あなたの場合、ジェネリックList<String>がおそらく最も適しているでしょう。でもまたStack<String>面白いQueue<String>かも。

于 2009-04-04T01:45:37.973 に答える
1

何語?

C#、Java、およびその他の多くの高水準言語にはArrayList、特定のサイズを設定せずに要素を追加および削除できるデータ構造 (または類似のもの) があります。

于 2009-04-04T01:45:48.923 に答える
1

Fortran では、ALLOCATE を使用できます。

于 2009-04-04T01:46:46.910 に答える
0

C# を使用している場合は、ArrayList を使用します。必要に応じて動的に拡張し、何でも保持できます (これは良いことも悪いこともあります)。はい、ある種のリストを使用する必要があります。また、この using ステートメントを含めることを忘れないでください。

using System.Collections;
于 2009-04-04T01:44:22.657 に答える