読者です 読者をやめる 読者になる 読者になる

白猫のメモ帳

JavaとかJavaScriptとかHTMLとか機械学習とか。

Java使いがC#を勉強する その② 配列

こんばんは。

久しぶりに雨が降りましたね。
雨が好きなわけではないですが、湿度が高いのはありがたいです。

さて、前回はデータ型について比較したので、
今回はそのついでのような形で配列について見ていきます。

1次元配列


1次元配列に関しては、あまり大きな違いはありません。
この2つくらいです。

①括弧を付ける位置

Javaはデータ型の後ろと変数の後ろのどちらにでも括弧を付けることができますが、
C#ではデータ型の後ろにしか付けることができません。

int[] ary1; // JavaでもC#でもOK

int ary2[]; // JavaはOKだけど、C#はNG


②初期化時のサイズ指定

C#では初期化時にサイズ指定ができます。

int[] ary1 = new int[]{1, 2}; // JavaでもC#でもOK

int[] ary2 = new int[2]{1, 2}; // JavaはNGだけど、C#はOK
int[] ary2 = new int[3]{1, 2}; // これはエラー

 

多次元配列

 

ジャグ配列

Javaにおける多次元配列は、C#においてはジャグ配列と呼ばれます。
これは配列の中に配列が入れ子になっている状態です。

同一の次元内にサイズの異なる配列を入れることができるため、
jag(ギザギザ)という名前のようです。

int[][] ary = new int[5] [];
for (int i = 0; i < ary.Length; i++)
{
    ary[i] = new int[i % 2 == 0 ? i + 1 : ary.Length - i];
}

f:id:Shiro-Neko:20170203150601j:plain

あふれでるテトリス感。

多次元配列

C#における多次元配列は、対応するものがJavaにはありません。

int[,] ary = new int[4, 5];
Console.WriteLine(ary.Length);        // 20
Console.WriteLine(ary.GetLength(0));  // 4
Console.WriteLine(ary.GetLength(1));  // 5

Lengthは全体のサイズが取れるので、気をつけなくてはいけないですね。

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

もちろんこんな感じの初期化もできます。

1回のnewですべてのメモリが確保できるのは素敵ですね。

そんなに違和感はない・・・?


C#Javaで配列にはあんまり違いはなさそうです。
が、これはかなり違和感あるなぁ。

var ary = new[] { 1, 10, 100, 1000 };

いや、これは配列じゃなくてvarへの違和感ですね。