2009-04-07 21 views
9

は、私は、私はそれのために値を割り当てた配列、ここで実行時に

int[] i = {1,2,3,4,5}; 

を持って考えてみましょう。しかし私の問題では、これらの値は実行時にのみ得られます。 アレイにどのように割り当てることができますか?例えば

私は、ユーザーからの配列の最大サイズを取得し、それらの値は、今どのように私は[]配列int型に割り当てます。

また、最後にInt []にキャストできるArrayListなどの他のデータ型を使用できますか?

答えて

17

まあ、最も簡単にはList<T>を使用することです:

List<int> list = new List<int>(); 
list.Add(1); 
list.Add(2); 
list.Add(3); 
list.Add(4); 
list.Add(5); 
int[] arr = list.ToArray(); 

そうでない場合、あなたは適切なサイズの配列を割り当てる必要がありますインデクサを介して設定します。

int[] arr = new int[5]; 
arr[0] = 1; 
arr[1] = 2; 
arr[2] = 3; 
arr[3] = 4; 
arr[4] = 5; 

配列にアイテムを追加するたびに再配分する高価であるとして、あなたは、配列のサイズを予測することができない場合は、この第二のアプローチは有用ではありません。 List<T>は倍増戦略を使用して必要な再配分を最小限に抑えます。

+0

obj.myIntArray =(新しいリスト {1,2})。ToArray(); – lamarant

+0

"{1,2,3,4,5}"を使用する方法はありませんか? – Xonatron

+1

@Xonatronはい、過去7年間にコレクションイニシャライザが追加されました。lamarantのコメントを参照してください。しかし、コンパイル時に値が分かっていれば、配列にそのまま行くことができます*とにかく* –

7

List<int>を使用し、末尾にToArray()を呼び出して配列を作成します。しかし、本当にに配列が必要ですか?一般的には、他のコレクション型で作業する方が簡単です。 Eric Lippertが書いたように、 "arrays considered somewhat harmful"。

あなたができるこのように、かかわらず、明示的にそれを行う:

using System; 

public class Test 
{ 
    static void Main() 
    { 
     int size = ReadInt32FromConsole("Please enter array size"); 

     int[] array = new int[size]; 
     for (int i=0; i < size; i++) 
     { 
      array[i] = ReadInt32FromConsole("Please enter element " + i); 
     } 

     Console.WriteLine("Finished:"); 
     foreach (int i in array) 
     { 
      Console.WriteLine(i); 
     } 
    } 

    static int ReadInt32FromConsole(string message) 
    { 
     Console.Write(message); 
     Console.Write(": "); 
     string line = Console.ReadLine(); 
     // Include error checking in real code! 
     return int.Parse(line); 
    } 
} 
+0

は、合意されました。ジェネリックリストは使い方が簡単だから今は配列を使うことはほとんどありません。 – Wedge

0

実行中にサイズが変わる配列を必要とする場合は、別のデータ構造を使用する必要があります。一般的なリストが行います。次に、要素を動的に追加することができます。

編集:マークは私が執筆中に答えを掲載しました。これはまさに私が意味していたものでした。

+0

ここで同じですので削除しました –

6

あなたはどういう意味ですか?

int[] array = { 1, 2, 3, 4, 5 }; 
array = new int[] { 1, 3, 5, 7, 9 }; 
array = new int[] { 100, 53, 25, 787, 39 }; 
array = new int[] { 100, 53, 25, 787, 39, 500 }; 
+0

これは一番最初の答えではないのですか? – Xonatron

0

あなただけの別の関数を呼び出す代わりに以下の行を使用することができます。

using System; 

public class Test 
{ 
    static void Main() 
    { 
     Console.WriteLine("Please enter array size"); 
     int size = Convert.ToInt32(Console.ReadLine()); 

     int[] array = new int[size]; 
     for (int i=0; i < size; i++) 
     { 
      Console.WriteLine("Please enter element " + i); 
      array[i] = Convert.ToInt32(Console.ReadLine()); 
     } 

     Console.WriteLine("Finished:"); 
     foreach (int i in array) 
     { 
      Console.WriteLine(i); 
     } 
    }