C#初心者によるC#のお勉強やろう05 配列編

寒くなると人恋しくなりますね。el(える)です。

 

今回は配列を使っていくお勉強となります。

複数の変数をまとめて扱えるので、管理も楽になりますね。

配列を使ってみよう

まずは1週間ぶんの体重を配列に入れて表示するプログラムを書いてみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {

            float[] weights;
            weights = new float[7];

            weights[0] = 68.1f;
            weights[1] = 69.5f;
            weights[2] = 70.1f;
            weights[3] = 67.7f;
            weights[4] = 67.5f;
            weights[5] = 68.7f;
            weights[6] = 69.1f;

            for(int i = 0; i < 7; i++)
            {
                Console.WriteLine(weights[i]);
            }
        }
    }
}

配列

このプログラムでは変数を7つ用意するのではなく、

配列の変数を1つ宣言して7日分の体重を管理しています。

配列とは 変数の箱を横一列に繋げた1つの細長い箱のイメージ です。

配列

配列を宣言するときはfloat[]のように型名の後ろに[]をつけます。

その他の型、int[]やstring[]も配列を作ることができます。

変数は宣言をすれば値を代入できましたが、

配列は宣言しただけでは使うことができません。

配列は変数の箱を繋げたものなので、

 何個の箱を繋げた配列にするかを指定 する必要があります。

配列を構成する箱の個数(要素数)を決める書式がこのようになります。

配列の要素を指定する書式

変数名 = new 型名[要素数]

配列の要素数を決めるには、new演算子に続けて型名と要素数を指定します。

配列の宣言と要素数の指定は1行でかくことも出来ます。

float[] weights = new float[7];

配列が出来たら、それぞれの箱の中に値をいれます。

配列の要素へアクセスして値を出し入れする書式

変数名[インデックス]

インデックスとはアクセスしたい要素が配列の先頭要素から何番目にあるかを示す数字です。

変数名[インデックス]と書くことで値を代入したり取得したりできます。

インデックスは0からはじまります。

weights[0]からweights[6]にそれぞれfloat型の値を代入しています。

 

配列の初期化はまとめてする方法もあります。

float[] weights = {68.1f,69.5f,70.1f・・・・・}

もし配列が7から増えていくとfor文の数値も変えるのは面倒ですよね。

そこで配列の全要素を調べるプログラムがあります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {

            float[] weights;
            weights = new float[7];

            weights[0] = 68.1f;
            weights[1] = 69.5f;
            weights[2] = 70.1f;
            weights[3] = 67.7f;
            weights[4] = 67.5f;
            weights[5] = 68.7f;
            weights[6] = 69.1f;

            for(int i = 0; i < weights.Length; i++)
            {
                Console.WriteLine(weights[i]);
            }
        }
    }
}

または

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {

            float[] weights;
            weights = new float[7];

            weights[0] = 68.1f;
            weights[1] = 69.5f;
            weights[2] = 70.1f;
            weights[3] = 67.7f;
            weights[4] = 67.5f;
            weights[5] = 68.7f;
            weights[6] = 69.1f;

            foreach(float w in weights)
            {
                Console.WriteLine(w);
            }
        }
    }
}

for文と foreach文で繰り返し処理をしています。

配列の要素の調べ方として以下があります。

配列の要素数を取得する書式

配列の変数名.Lenght

 配列の要素数が必要な処理ではLenghtをつかう ようにしましょう

また、全要素に順番にアクセスする方法にforeach文があります。

foreach文の書式

foreach (型名 変数名 in 配列変数名)

foreachも配列の全要素を取り出すので、

配列の長さが変わっても書き直す必要がありません。

平均体重を計算してみよう

配列の変数名.Lenghtの応用編です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {

            float[] weights;
            weights = new float[7];

            weights[0] = 68.1f;
            weights[1] = 69.5f;
            weights[2] = 70.1f;
            weights[3] = 67.7f;
            weights[4] = 67.5f;
            weights[5] = 68.7f;
            weights[6] = 69.1f;

            float sum = 0.0f;

            for (int i = 0; i < weights.Length; i++)
            {
                sum += weights[i];
            }
            float average = sum / weights.Length;
            Console.WriteLine(average);
        }
    }
}

 

体重の合計値をいれるためsum変数を0.0fで初期化しています。

そしてsum変数にweights配列中のすべてのデータを足します。

 合計値sumをweights.Lengthで割り 平均値を出しています。

次は一番重かった体重を求めてみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Sample
{
    class Program
    {
        static void Main(string[] args)
        {

            float[] weights;
            weights = new float[7];

            weights[0] = 68.1f;
            weights[1] = 69.5f;
            weights[2] = 70.1f;
            weights[3] = 67.7f;
            weights[4] = 67.5f;
            weights[5] = 68.7f;
            weights[6] = 69.1f;

            float max = 0.0f;

            for (int i = 0; i < weights.Length; i++)
            {
                if(weights[i] > max)
                {
                    max = weights[i];
                }
            }

            Console.WriteLine(max);
        }
    }
}

 

まず最大値を保持するmax変数を用意します。

そして、max値より大きい値がでてきたら、max変数に代入しています。

配列の最後まで確認し終わったときにmax変数に入っている値が最大値となります。

多次元配列

C#には縦方向にも変数をならべた2次元配列や3次元配列もあります。

たとえば、

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

は2次元配列になります。

要素にアクセスするには配列変数名[行のインデックス,列のインデックス]となります。

2次元配列

終わりに

なんかだんだん難しくなってきましたね。

なんで変数で宣言してもnewいらないのに、

配列はnew演算子がいるんでしょう。

このへんがよく分からないんですよね・・・

前までは完璧を求めて、なぜだとずっと考えていたのですが、

今ではそういう仕様と考えるようにしています。

 

勉強の本これも欲しいんですよね。

ゲーム作りながらC#も勉強できちゃうやつ。

どっちもなんてわがままかな。。。

 

それではまた次回。

シェアしてくれたら嬉しいです!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です