Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8901

【C#】[,]と[][]って違う配列だった。そしてLINQ

$
0
0

最近ASPを初めたC#初心者です。

ジャグ配列を多次元配列だと勘違いしていたため備忘録を兼ねて記事を書きました。

公式ドキュメント

とりあえず公式ドキュメントだ、という人のためにのリンクと簡単な説明の引用です。
ジャグ配列

ジャグ配列とは、その要素も配列である配列です。 ジャグ配列の要素には、異なるディメンションとサイズを指定できます。 ジャグ配列は、"配列の配列" と呼ばれることがあります。 次の例では、ジャグ配列の宣言、初期化、およびアクセスの方法について説明します。

多次元配列

配列は 1 つ以上の配列を持つことができます。 たとえば、次の宣言は、4 行と 2 列の 2 次元の配列を作成します。

なぜ勘違いが生まれたのか

多次元配列とイメージして最初に浮かんだ書き方がこうでした。

int[][]array;

これで構文エラーが出なかったので、これであってたーと思ってしまったのが原因です。

その後、以下の値が入ることに気づきました。
[[1],[2, 3]]

これ多次元配列違う…
その後、ジャグ配列と多次元配列があることに気づきました。

多次元配列は次のように書きます。

int[,]array;

[,]と[][]って違う配列だった(タイトル回収)

はじめて学んだ言語がJavaというのもあって、まだJavaの書き方が頭の中に残っていたそうです。(もうJava数年触ってないけど)

多次元配列だとLINQが使えなかった

ここまでジャグ配列でコード書いてところを多次元配列に変えたことで構文エラーが出ることに気づきました。

int[][]array=newint[][]{newint[]{1},newint[]{2,3}};array.Select(x=>x);// ジャグ配列 → OKint[,]array=newint[,]{{0,1},{2,3}};array.Select(x=>x);// 多次元配列 → Error

上記の公式ドキュメントを読んで、配列の作りがそもそも違うことを知ったので、そりゃ違うかーと軽く考えていたのですがそもそも多次元配列だとLINQが使えないことに気づきました。(こいつ何度も気づかされてんな)

多次元配列でLINQ使えない説明が公式ドキュメントに書いてあった気がするのですが今見返しても見つからなかった…

LINQ使うなら次のようにすればいいでしょうか?(※実際には書いてない)

int[,]array=newint[,]{{0,1},{2,3}};varcastArray=array.Cast<int>();// [0, 1, 2, 3]

ということで、ジャグ配列と多次元配列の違いでした。

あとがき

C#むずかしい


Viewing all articles
Browse latest Browse all 8901

Trending Articles