C#の動的配列


112

C#で動的配列を作成する方法はありますか?


1
それでも古い泥が残っている場合は、List <>の代わりに[]を使用すると、Array.Resize()を使用できます。これが良い例です。dotnetperls.com/array-resize
Gian

リンクdotnetperls.com/array-resizeが機能していません。(参考)
Su Llewellyn

回答:


150

見てみましょう一般的なリストを


13
質問(簡潔で説明的ではありません)は、一般的なリストについて尋ねているのではありませんdynamic[] -msdn.microsoft.com/en-GB/library/dd264736.aspx(動的タイプの配列)またはExpandoObject msdn.microsoft.com/について尋ねている可能性がありますen-us / library /…これらに言及しないことで答えを-1にできる
Luke T O'Brien

6
@ LukeTO'Brien、ダイナミクスはC#4.0で導入されました。C#4.0は、この質問が最初に尋ねられてから1年後にリリースされました。OPはおそらくen.wikipedia.org/wiki/Dynamic_arrayの
Brian Merrell

6
記事へのリンクのみで構成される回答は役に立ちません。リンクがアクティブであり続ける保証はありません。
JamEngulfer 2018

@JamEngulferそれは真実ではありません。彼のリンクテキストが「これを見て」と「これ」がリンクされている場合、私はあなたに同意します。あなたが残っているもので、リンク、および外観を削除した場合は、「一般的なリストを見てみましょう」のOPの答えはグーグルで、将来のリーダーを取得するための情報がたくさんある....
リン崩れ

88

コードサンプルを使用して、ChrisとMigolの回答を拡張します。

配列を使用する

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

一般的なリストを使用します。内部的には、List <T>クラスはストレージに配列を使用しますが、効率的に成長できるようにしています。

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
私たち2人がArrayListについて話し合ったので、この例は半分悪いです
Migol

21
この回答はあなたの@Migolよりも優れています。これは、キーワードとして言及するだけでなく、実際にList <>を使用する方法を示しているためです。「ハーフバッド」->「ハーフグッド」->グッド
フガス14

56

時々プレーンリストがより便利なため、ジェネリックリストよりも好まれます(コストのかかる計算-数値代数アプリケーションなどのパフォーマンスの向上、またはRやMatlabなどの統計ソフトウェアとのデータ交換に)

この場合、リストを動的に開始した後でToArray()メソッドを使用できます。

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

もちろん、これが意味を持つのは、配列のサイズが事前に知られていないか、固定されていない場合だけです。プログラムのある時点ですでに配列のサイズがわかっている場合は、固定長配列として開始することをお勧めします。(たとえば、ResultSetからデータを取得する場合、そのサイズをカウントして、そのサイズの配列を動的に開始できます)


1
インデクサーを使用している限り、価値はありません。
aaimnr

2
List <T>は通常の配列を使用するので、Araryは便利ではなく(List <T>インターフェイスのサブセットを提供)、ほぼ同じパフォーマンスを提供します。6000000要素の反復:リスト/ for:1971ms配列/ for:1864ms(stackoverflow.com/questions/454916/…からのベンチマーク)
aaimnr

9
あなたがいる場合持っているインタフェースに配列を渡すために、それはしなければならない配列です。リストを作成し、それを渡す直前に配列にする方がはるかに簡単です。この答えは質問に対応しているので、私は他の答えよりもこの答えが好きです!
Michael Stimson、2014年

36

List<T>強く型付けされたもの、またはArrayList.NET 1.1を持っている場合、または変数をキャストしたい場合。


2

動的配列の例:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

動的オブジェクトを使用してこれを行うことができます。

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

実際に配列を実装している配列リストを使用します。最初はサイズ4の配列を取り、それがいっぱいになると、2倍のサイズで新しい配列が作成され、最初の配列のデータが2番目の配列にコピーされ、新しい項目が新しい配列に挿入されます。また、2番目の配列の名前はfirstのエイリアスを作成するため、前と同じ名前でアクセスでき、最初の配列は破棄されます。


1

コレクションクラスのarraylistオブジェクトを使用できます

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

使用できる要素を追加したい場合

arr.add();

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.