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

C#_var とは

 

var は

わざわざ型を指定しなくても分かるよね。自分で推測してくれ。

という指示をコンパイルに出すキーワード。

 

● ローカル変数 での var ( 暗黙的に型指定されるローカル変数 )
var は 右側の式から変数の型を推測しろとコンパイラに指示する。

ex)
var i = 10;

右辺10整数なので、変数 i をコンパイラは int 型 と決定し、
変数i は int 型 でコンパイルされる。

 

配列での var ( 暗黙的に型指定される配列 )
ローカル変数と同様。

ex)
var a = new[ ]{1, 2, 3, 4, 5};

右辺は int 型の配列なので、変数 a はint [ ] 型 でコンパイルされる。

 

var はいつ使うか
・ローカル変数では、初期化が行われて && その変数の型が人の目からみて自明
for foreach変数の型を決定する時。

ex)
for (var i = 0; i < 10; i++) {

foreach (var ch in laugh) {

 

NG
・変数の型は変数名に頼らない。ex) inputInt など。変数名が正しくない場合がある。
・代入の右側から型が明らかでない場合は、var を使用してはいけない。

 

こちら参照。
http://qiita.com/hollydad/items/1516a3f13147a754b9db
https://msdn.microsoft.com/ja-jp/library/bb383973.aspx

 

以上。
コンパイルソースコード機械語に変換すること。
コンパイラ:変換するソフトウェア。

C#_変数の中身を確認したい

Console.WriteLine( "中身:{0}・F:{1}・T:{2}" ,  hoga, fuga, test );

をコード内に書けばOK
{0} には、変数 hoga の値が出力され、
{1} には、変数 fuga の値が出力され、
{2} には、…
というように「出力」ウィンドウに表示される。

 

出力 ウィンドウが見当たらない場合は、「表示」メニューから。

f:id:koshinRan:20170404012955j:plain

 

 以上。

↓ キャプチャ

f:id:koshinRan:20170404012558j:plain

( 実行 )

f:id:koshinRan:20170404012414j:plain

 


C#_三次元配列

配列に悩まされるのでメモ4。めっちゃ分からなくなる。

型[ , , ] 変数 = new 型 [  Z, YX ] ;

Z:要素の数 (奥行のサイズ)
Y:1つのZに格納する要素の数 ( )
X:1つのYに格納する要素の数 ( )

※ Memo

配列を考える時、座標で考えている。hoga[1,2] は y = 1, x = 2。
y は縦軸だから、hoga[列, 行] と思いがちだが、
y番号を表し、x番号を表しているので注意!

型[, , ] 変数 = new 型[3, 3, 5]; のイメージ
クリックで拡大

f:id:koshinRan:20170405214025j:plain

 

各格子は以下の様な座標となる

f:id:koshinRan:20170405214117j:plain

 

a[0,2,3] = hoga ;
とすると
[0,2,3] に hoga 要素が代入される。

f:id:koshinRan:20170405215249j:plain

 

ex)

//a と b は同じサイズの三次元配列
int[,,] a = new int[4,3,4];
int[,,] b = new int[,,]
{
   { {   1,  2,  3 4 }, {   5,  6,  7,  8 }, {  9,10,11,12 } },
   { { 13,14,15,16 }, { 17,18,19,20 }, { 21,22,23,24 } },
   { { 25,26,27,28 }, { 29,30,31,32 }, { 33,34,35,36 } },
   { { 37,38,39,40 }, { 41,42,43,44 }, { 45,46,47,48 } }
  };

//b の要素1から48の出力
foreach (var bb in b)
{
    Console.WriteLine(bb);
}

宣言時の要素の数(サイズ) と 代入・列挙の時の index異なる
ex ) b の 48 を取得したい時は b[3,2,3];

 

 以上。

http://www.kushiro-ct.ac.jp/yanagawa/ex-2016/1-tg/02/index.html

C#_(三?)多次元配列 の初期化

二次元配列 ( 三次元配列 ) と 配列の中の配列 ( の中の配列 ) は違うものらしい。
二次元配列 ( 三次元配列 ) は1つの foreach で要素全て取り出せるとのこと。

下記から。
http://mag.autumn.org/Content.modf?id=20040810213604

 

配列に悩まされるのでメモ3。めっちゃ分からなくなる。

配列の中に、二次元配列を格納 する。

■ 宣言と長さ確保

二次元配列の長さのみを指定
[ ][ , ] 変数 = new 型[ ][ , ] { new int [  ,  ) ]  };

 

配列の長さと、二次元配列の長さを指定。
[ ][ , ] 変数 = new[ 配列の長さ ][ , ]
{
    //配列の長さ分、二次元配列を長さ(, )指定してnew
    new int [  ],
    new int [ ],
    :
    :
};

 

■ 初期化

[,] 変数 = new[配列の長さ][,]
{
    //配列の長さ分、二次元配列を初期化
    ex)3 * 4 の int 型二次元配列
    new [,]{ {  1,  2,  3,  4 }, { 5,  6,  7,  8  }, {  9, 10, 11, 12 } },
    new [,]{ { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } },
    :
};

 

ex)

 int[ ][,]a二次元配列宣言長さ確保

 int[ ][,]b配列二次元配列宣言長さ確保

 int[ ][,]c初期化

c は↓のようなイメージ
[0][ 1,  2,  3,  4],
    [ 5,  6,  7,  8],
    [ 9, 10, 11, 12]

[1][13, 14, 15, 16],
    [17, 18, 19, 20],
    [21, 22, 23, 24]

[2][25, 26, 27, 28],
    [29, 30, 31, 32],
    [33, 34, 35, 36]

[3][37, 38, 39, 40],
    [41, 42, 43, 44],
    [45, 46, 47, 48]

[4][49, 50, 51, 52],
    [53, 54, 55, 56],
    [57, 58, 59, 60]

 

//b c3 × 4 の二次元配列を 5 持つ配列
int[,] a = new int[,] { new int[3, 4] };

int[,] b = new int[5][,] {
    new int[3, 4],
    new int[3, 4],
    new int[3, 4],
    new int[3, 4],
    new int[3, 4]
};
int[][,] c = new int[5][,]
{
    new [,]{ {  1,  2,  3,  4 }, { 5,  6,  7,  8  }, {  9, 10, 11, 12 } },
    new [,]{ { 13, 14, 15, 16 }, { 17, 18, 19, 20 }, { 21, 22, 23, 24 } },
    new [,]{ { 25, 26, 27, 28 }, { 29, 30, 31, 32 }, { 33, 34, 35, 36 } },
    new [,]{ { 37, 38, 39, 40 }, { 41, 42, 43, 44 }, { 45, 46, 47, 48 } },
    new [,]{ { 49, 50, 51, 52 }, { 53, 54, 55, 56 }, { 57, 58, 59, 60 } }
};


//c 配列の列挙
for (int i = 0; i < 5; i++)
{
    for (int j = 0; j < 3; j++)
    {
        for (int k = 0; k < 4; k++)
        {
            //1 ~ 60 が出力
            //Console.WriteLine(c[i][j, k]);
        }
    }
}
/* 出力は以下も可
foreach (var cc in c)
{
    foreach (var ccc in cc)
    {
        Console.WriteLine(ccc);
    }
}
*/

  宣言時の要素の数(サイズ) と 代入・列挙の時の index異なる
ex) c 変数の 60 を取得したい時は、 c[4][2,3] とする。

 

■注意■

配列長さまたは、配列の初期化子指定する必要がある。
初期化子: { 初期値, 初期値, … } の部分

以下は NG
int[ ][,] hoga = new int[ ][,] { new int[,] };   //長さ、初期化子を指定していない

int[ ][,] fuga = new int[5][,] { new int[3, 4] };
 //長さが 5と決まったのでその分の初期化子が必要。

 

以上。


C#_二次元配列 の初期化・要素代入

配列に悩まされるのでメモ2。めっちゃ分からなくなる。

[ , ] 変数 = new 型[ 要素の数 ( ) ,  1 つの要素に格納する数 ( ) ] ;

※ Memo
配列を考える時、座標で考えている。hoga[1,2] は y = 1, x = 2。
y は縦軸だから、hoga[列, 行] と思いがちだが、
y番号を表し、x番号を表しているので注意!

 

int[,] a は 3 行 4列 の二次元配列を宣言 & 確保

int[,] b は 3 行 4列 の以下の二次元配列を初期化
ex) b[0] の要素は 一次元配列が代入されており、その要素は[ 1,  2,  3,  4]。
     [0]  [1]  [2]  [3]
[0][ 1,   2,   3,   4]
[1][11, 12, 13, 14]
[2][21, 22, 23, 24]

 

int[,] a = new int[3, 4];
int[,] b = new int[,] {
    {  1,  2,  3,  4 },
    { 11, 12, 13, 14 },
    { 21, 22, 23, 24 }
};

//a の配列に1から12までの数を代入
int number = 1;
for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 4; j++)
    {
        a[i, j] = number;
        number++;
       
        //b の配列の要素を出力
        Console.WriteLine(b[i, j]);
    }
}

 

宣言時の要素の数(サイズ) と 代入・列挙の時の index異なる
ex) b 変数の 24 を取得したい時は、 b[2, 3] とする。

 

以上。

実践で使用するとなると、
宣言と配列の長さを確保しているだけの a 配列だろうか。

http://www.kushiro-ct.ac.jp/yanagawa/ex-2016/1-tg/02/index.html

C#_一次元配列 の初期化・要素代入

配列に悩まされるのでメモ。List なら長さ決まっていないから楽なのだが。

int[ ] a宣言 と格納する要素の数 ( 配列の長さ ) を確保
int[ ] b は 配列の初期化

int[ ] a = new int[4];           
int[ ] b = new int[ ] { 1, 2, 3, 4 };

//a の配列に要素を代入
for (int i = 0; i < a.Length; i++ )
{
    a[i] = i * 10;
}

 

宣言時の要素の数(サイズ) と 代入・列挙の時の index異なる
ex) b 変数の 4 を取得したい時は、 b[3] とする。

 

以上。

宣言 :存在を表明すること。
初期化:変数の宣言と同時に値を格納すること。

 

+= か =+ か分からなくなる

 +=

 a += b ;

は、a に b を 足し込む という意味。
a に b を加えたものを a に代入する

 

=+ 

a =+ b ;

は、「+1 × b」 を a に代入するという意味。

 

a = a + b;
なのだから、 a =+b; でいいじゃんと思っていた。

 

こちらから参照。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14166981709

 

以上。