多次元配列
配列の宣言 |
実体のない配列の宣言の方法としては、次のようなやり方があります。
int [] a1 = null;
このサンプルプログラムでは、まず 配列を int [] a1 = null のように、実体のない形で宣言します。 配列がnullのまま、各要素にアクセスすると、”オブジェクト参照がオブジェクト
インスタンスに設定されていません。”というSystem.NullReferenceException 例外があがることを確認しています。 このエラーメッセージはとんでもないですね!いったい、どういうセンスしているんだか! え?じゃあ、どういうメッセージがいいんだって? ”nullを参照しようとしました"でいいじゃん。 |
配列の初期化 |
配列の初期化の方法としては、次のようなやりかたがあります。
int[] b1 = new int[4]; int[,] b2 = new int[2,3];
int[] b1 = new int[4]; int[,] b2 = new int[2,3];
int[] c1 = new int[5] {1,2,3,4,5}; int[] c2 = new int[ ] {1,2,3,4,5}; int[] c3 = {1,2,3,4,5};
int[,] d4 = { {1,2,3},{4,5,6} };
このサンプルプログラムでは、まず 配列を int [] a1 = null のように、実体のない形で宣言します。 このまま、各要素にアクセスすると、オブジェクト参照がオブジェクト
インスタンスに設定されていません。というSystem.NullReferenceException 例外があがることを確認しています。 |
|
C,C++とは違って、配列には、もう1つ Jagged 配列があります。 これは、配列の配列で、異なる長さの配列を配列として構成できます。 C, C++ の配列の書式が、ジャグ配列の書式と同じになっているので、混同しないように注意が必要です。
配列の宣言 |
実体のない配列の宣言の方法としては、次のようなやり方があります。
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[5];
jaggedArray[1] = new int[2];
jaggedArray[2] = new int[4];
|
配列の初期化 |
配列の初期化の方法としては、次のようなやりかたがあります。
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[] {1,2,3,4,5};
jaggedArray[1] = new int[] {1,2};
jaggedArray[2] = new int[] {1,2,3,4};
次に示すように、宣言時に配列を初期化することもできます。
int[][] myJaggedArray = new int [][]
{
new int[] {1,2,3,4,5},
new int[] {1,2},
new int[] {1,2,3,4}
};
最初の new int [][]は省略することができます。
|
|
using System;
using System.Text;
namespace TestArrays
{
/// <summary>
/// Array の概要の説明です。
/// </summary>
class Class1
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main(string[] args)
{
int[] a1 = null;
int[,] a2 = null;
int[,,] a3 = null;
try
{
// null のままアクセスすると、例外があがる。
// System.NullReferenceException:
// オブジェクト参照がオブジェクト
// インスタンスに設定されていません。
foreach(int i in a3)
Console.WriteLine("{0}", i);
}
catch(Exception e)
{
Console.WriteLine("{0}", e);
}
// 初期化方法
int[] b1 = new int[4];
int[,] b2 = new int[2,3];
int[] c1 = new int[5] {1,2,3,4,5};
int[] c2 = new int[ ] {1,2,3,4,5};
int[] c3 = {1,2,3,4,5};
int[,] d4 = { {1,2,3},{4,5,6} };
foreach(int i in d4)
{
Console.WriteLine("{0}", i);
}
// params キーワードの使い方
UseParams( 1,2, 3.14, "\n\nparams キーワードの使い方", d4);
// バイトアレイへの変換
TestByteArray();
Console.ReadLine();
}
public static void UseParams(params object[] list)
{
foreach(object o in list)
Console.WriteLine("{0}:\t{1}", o.GetType(), o);
}
public static void TestByteArray()
{
Console.WriteLine("---------\nbyte array");
byte [] byteArray = BitConverter.GetBytes(0x1234abcd);
for(int i = 0; i < byteArray.Length; i++)
Console.WriteLine("byte [{0}] = {1:x}", i, byteArray[i]);
Console.WriteLine("---------\nstring array");
byte [] strArray =
Encoding.GetEncoding("shift-jis").GetBytes("ハローWorld");
for(int i = 0; i < strArray.Length; i++)
Console.WriteLine("byte [{0}] = {1:x}", i, strArray[i]);
}
}
}
|