【C#】【基礎編】配列とリストとディクショナリ

スポンサーリンク

今回の基礎は、配列とリスト(List型)とディクショナリ(Dictionary型)です。

初心者でもわかるように解説していきます。

そもそも配列ってなに?

プログラミング言語をやっていると「配列」という言葉が出てきます。

図解で教えると

違いがわかりますか?上の図をプログラムで書いてみると、

【定義を5つの場合】
int a = 1;
int b = 2;
int c = 3;
int d = 4;
int e = 5;
【配列の場合】
int[] a = new int[]{1,2,3,4,5};

または、

int[] a = new int[5];
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;

配列というのは、1つの定義名で同じ型の変数を複数扱う事ができるモノです。

A君
A君

結果が同じなら、配列なんて使う必要無くないっっ!?

って思う人がいるかもしれません。

配列で重要なのは、同じ性質の変数を入れて、

繰り返し文でプログラミングコードをわかりやすく、シンプルに書くことが出来ます。

【例題1】
10人クラスで数学のテストを行いました。
A君:10点  B君:30点  C君:80点  D君:20点  E君:90点
F君:50点  G君:70点  H君:40点  I君:60点  J君:100点

平均点は何点ですか?  答え:55点

変数のみで行った場合、

int Num = 10;  //10人クラス
int A = 10;
int B = 30;
int C = 80;
(省略)
int J = 100;

int sum = A + B + C + (省略) + J;
int ave = sum / Num;
 

全てを変数定義にした事で、だれが何点だったか?という面では、

わかりやすいソフトなのかもしれません。

しかし、今回の問題の目的は【平均点を求める事】なので、

だれが何点というのは重要ではありません。

配列を使うと下記のようになります。

int[] score = new int[]{10,30,80,(省略),100};
int sum = 0;
for(int n = 0;n < score.Length;n++)
{
  sum = sum + score[n];  //sum += score[n]でもOK!!
}
int ave = sum / score.Length;

ここで言いたいのは、

点数という同じ性質をもった変数を1つにまとめる事で、

プログラミングコードをシンプルに書く事が出来ました。

結果は同じなので、【無理に配列を使え‼‼】と言ってるわけではありません。

※プログラミングの配列で注意してほしいのは、0から始まります。

配列とは、同じ性質をもった変数の塊の事である。

リスト(List型)って何?

配列の兄弟みたいなヤツです。

自分がプログラミングする時は、便利なので良く使います。

先ほどの例題に追加情報が発生したとしましょう。

【例題2】
10人クラスで数学のテストを行いました。
A君:10点  B君:30点  C君:80点  D君:20点  E君:90点
F君:50点  G君:70点  H君:40点  I君:60点  J君:100点

テスト後に、K君が転入してきて、同じテストを受けました。
K君:55点

平均点は何点ですか?  答え:55点

配列の場合だと、

int[] score = new int[]{10,30,80,(省略),100,55};
int sum = 0;
for(int n = 0;n < score.Length;n++)
{
  sum = sum + score[n];  //sum += score[n]でもOK!!
}
int ave = sum / score.Length;

これで終わりです。

A君
A君

配列さいこ~ジャン‼

この例題だとリストの良さが伝わりませんが、リストを使ってみます。

int[] score = new int[]{10,30,80,(省略),100};  //10人分のスコア
List<int> LstScore = new List<int>();  //リストを作る
LstScore.AddRange(score);        //10人分のスコアをまとめて登録
LstScore.Add(55);            //転校生の分を追加
int sum = 0;
for(int n = 0;n < LstScore.Count;n++)
{
  sum = sum + LstScore[n];  //sum += LstScore[n]でもOK!!
}
int ave = sum / LstScore.Count;

配列とは、1つの同じ性質をもった変数の塊と説明しました。

ここで、配列とリストの大きな違いは、変数の個数が分かっているかいないかです。

図解で比較してみましょう。

配列は、個数を決めて定義するのに対して、

リストは個数を決めずに、後から追加していきます。

仮にa3の要素を削除したいと思った時の処理は大きく違います。

配列は、a4をa3へ、a5をa4へ移動させ、a5を削除します。

リストは、a3を直接削除し、内部的に勝手に詰めます。

リストを例えるなら、【飲食店の行列の人たち】です。

同じ性質をもった変数の塊の事という前提は配列と同じです。

リストは、塊の中が可変であり、配列は、塊の中は固定であるという違いがあります。

ディクショナリ(Dictionary型)ってなに?

配列の親戚みたいなヤツです。(リストよりも遠ざかりましたwww)

ディクショナリを日本語で言うと辞書です。

辞書のように言葉(Key)と意味(Value)を紐づけます。

KeyとValueを1セットで扱う配列の事です。

先ほどの例題1で考えてみましょう。

Dictionary<string,int> score = new Dictionary<string,int>();
score.Add("A",10);
score,Add("B",30);
score,Add("C",80);
(省略)
score,Add("J",100);

int sum = 0;
foreach(int value in score.Values)
{
  sum = sum + value;
}
int ave = sum / score.Count;

こんな書き方でも可能

Dictionary<string,int> score 
  = new Dictionary<string,int>{{"A",10},{"B",30},{"C",80},(省略),{"J",100}}

リストと同じように今回の例題ではディクショナリの良さを表現はできていません。

配列とリストは、【インデックス(0からの連番)と値】が紐づけされていましたが、

ディクショナリは、インデックス部分すら自分で任意にしましょう!!って感じのモノです。

例えるなら、【マンションの部屋番号と人】だったり、【社員番号と人】だったりと、

【KeyとValueの関係が成り立っている】状態です。

まとめ

配列     :同じ性質の変数の個数が固定の塊
リスト    :同じ性質の変数の個数が可変の塊
ディクショナリ:同じ性質の変数が他の同じ性質の変数と紐づいている

配列とリストとディクショナリで各々特徴が違います。

特徴を理解した上で使い分けましょう。

コメント

タイトルとURLをコピーしました