[C#] 配列に要素を追加する - 配列の長さを初期化後に変更する

このページのタグ:[C#] [C# 配列]
C#での配列の使用について紹介します。

配列に要素を追加する、配列の長さを初期化後に変更する

C#では配列は固定配列となるため、配列の長さを後から変更することや、配列に要素を追加することはできません。

下記のコードでは同名の変数に再度配列を初期化することで配列の長さを変更できますが、格納されていた値はすべてクリアされてしまいます。

同名の変数で初期化しなおす例

コード


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ArrayDemo
{
  public partial class FormReArrayDemo : Form
  {
    public FormReArrayDemo()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string[] strArray = new string[3];

      strArray[0] = "ペンギン";
      strArray[1] = "くじら";
      strArray[2] = "しろくま";

      strArray = new string[4];
      strArray[3] = "あひる";

      foreach (string item in strArray) {
        textBox1.Text += item + "\r\n";
      }
    }
  }
}

解説

同名の配列で初期化しなおした場合、元の配列に格納されていた値は初期化されてしまいます。配列の初期化後に代入した値のみがテキストボックスに表示されます。

実行結果

配列の初期化後に代入された値「あひる」のみがテキストボックスに表示されます。

同名の変数で初期化しなおし、元の配列のコピーから書き戻す例

コード


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ArrayDemo
{
  public partial class FormReArrayDemo : Form
  {
    public FormReArrayDemo()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      /* 省略 */
    }

    private void button2_Click(object sender, EventArgs e)
    {
      string[] strArray = new string[3];

      strArray[0] = "ペンギン";
      strArray[1] = "くじら";
      strArray[2] = "しろくま";

      string[] tempArray = new string[3];
      strArray.CopyTo(tempArray,0);

      strArray = new string[tempArray.Length+1];
      tempArray.CopyTo(strArray, 0);
      
      /*
      //オーソドックスな方法
      for (int i = 0; i < tempArray.Length; i++) {
        strArray[i] = tempArray[i];
      }
      */

      strArray[tempArray.Length] = "あひる";

      foreach (string item in strArray) {
        textBox1.Text += item + "\r\n";
      }
    }
  }
}

解説

先の例では配列の初期化により値が初期化されてしまうことが確認できました。これを防ぐため、一度テンポラリの配列に値を格納し、再度配列を初期化した後にテンポラリの配列から元の配列に値を代入しなおします。代入しなおした後追加の配列の要素の値を代入しています。

実行結果

元の配列の値に、新しく追加した「あひる」の値もテキストボックスに表示されます。

登録日 :2016-07-22    最終更新日 :2016-07-25
このページのタグ:[C#] [C# 配列]
Japanese
プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)