C#初心者によるC#のお勉強やろう06 コレクション編

ちゃんと勉強になっているか不安になるなぁ。el(える)です。

 

配列と同じくデータをまとめて扱う方法にコレクションというものがあります。

配列よりも柔軟にデータの追加や削除ができます。

コレクションには配列と似たList型、

2つのデータを一組にして格納できるDictionary型、

Stack型、Queue型などデータの特徴によって異なる型が用意されています。

 

データを追加しよう

これまでは配列の要素数を固定で管理してきました。

 プログラムを作る段階では要素数が決まらないことも多い です。

要素数が決まらない場合や、後から追加する場合には、

長さが固定の配列よりも List型 が便利です

1週間分の体重をList型の変数に入れて表示するプログラムです。

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)
        {
            List<float> weights = new List<float>();

            weights.Add(68.1f);
            weights.Add(69.5f);
            weights.Add(70.1f);
            weights.Add(67.7f);
            weights.Add(67.5f);
            weights.Add(68.7f);
            weights.Add(69.1f);

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

        }
    }
}

 

Line

配列の場合、最初に要素数を決めたら変更できませんでした。

Listは 必要に応じて後から要素を追加 できます。

List型の変数について、<>内の型名の部分にはListに代入する値の型を書きます。

また、配列と同様に宣言するだけでは使用できません。

new演算子を使ってListを使う準備が必要です。

List型の変数を作る書式

List<型名> 変数名 = new  List<型名>();

先ほどのプログラムではList<float>型のweights変数を作成しています。

そして、Addメソッドで Listに要素を1つずつ追加 しています。

Listに要素を追加する書式

変数名.Add(追加する値);

要素を追加するとListの最後尾にデータが追加され、

リストの長さが自動的に伸びます。

for文では値をすべて表示しています。

配列では、変数名.Lenghtでしたが、Listの要素数は変数名.Countで取得します

任意の位置に要素を追加したい場合はInsertメソッドを使います。

Insertで追加する書式

変数名.Insert(挿入位置のインデックス,値);

データを削除しよう

データを削除するプログラムです。

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)
        {
            List<float> weights = new List<float>();

            weights.Add(68.1f);
            weights.Add(69.5f);
            weights.Add(70.1f);
            weights.Add(67.7f);
            weights.Add(67.5f);
            weights.Add(68.7f);
            weights.Add(69.1f);

            weights.RemoveAt(2);

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

        }
    }
}

 

削除

このプログラムではRemobeAtメソッドを使い、

3番目に格納されているデータを削除しました。

RemobeAt()内にインデックスを書くと 指定したインデックスの要素がListから削除 されます。

削除した要素より後ろの要素は1つずつ前に詰まります。

Listから削除する書式

変数名.RemoveAt(インデックス);

特定の値を消したい場合は、Removeメソッドを使います。

Remove()内に消したい値を指定することで削除ができます。

もし同じ値を持つ要素があった場合はインデックスの小さい要素が削除されます。

値をソートしよう

一週間分のデータの中から値の低い順ベスト3を出力するプログラムです。

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)
        {
            List<float> weights = new List<float>();

            weights.Add(68.1f);
            weights.Add(69.5f);
            weights.Add(70.1f);
            weights.Add(67.7f);
            weights.Add(67.5f);
            weights.Add(68.7f);
            weights.Add(69.1f);

            weights.Sort();

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

        }
    }
}

 

sort

Sortメソッドを使って昇順に並び替えfor文でベスト3までをだしました。

Listをソートする書式

変数名.Sort();

sortで並び替えたときの順番は、

int型、float型などの数値なら小さい順、

string型、char型ならabc順になります。

Listで使えるメソッド

メソッド名 役割
Add(追加する値) 最後尾に要素を追加
Insert(追加位置,追加する値) 指定した位置に要素を挿入
Remove(削除する値) 指定した値の要素を削除
RemoveAt(削除するインデックス) 指定したインデックスの要素を削除
Clear() すべての要素を削除
IndexOf(検索する値) 要素の位置を検索
Contains(検索する値) 要素の有無を調べる
sort() Listを昇順に並べ替える
Reverse() Listを逆順に並べ替える

 

Dictionaryを使ってみよう

コレクションの代表的な型にはListのほかにDictionaryがあります。

Dictionary変数をつかったプログラムです。

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)
        {
            Dictionary<string,float> weights = new Dictionary<string, float>();

            weights.Add("2018/01/01",68.1f);
            weights.Add("2018/01/02",69.5f);
            weights.Add("2018/01/03",70.1f);
            weights.Add("2018/01/04",67.7f);
            weights.Add("2018/01/05",67.5f);
            weights.Add("2018/01/06",68.7f);
            weights.Add("2018/01/07",69.1f);

            Console.WriteLine(weights["2018/01/05"]);

        }
    }
}

 

Dictionary

Dictionaryは変数の箱に キーと値のペア でデータを格納します。

2つで一組のデータを格納したい場合にはDictionaryを使用します。

Listを宣言するときは<>の中に保存する値の型名を書きましたが、

Dictionaryの場合、<>の中にキーと値の両方の型名を書きます。

Dictionary変数を作る書式

Dictionary<キーの型,値の型> 変数名 = new Dictionary<キーの型,値の型>();

要素を追加する場合はListと同じようにAddメソッドを使います。

Dictionaryに要素を追加する書式

変数名.Add(キー,値);

Dictionaryからキーに対応する値を取得する書式

変数名[キー]

その他コレクションにはStackやQueueなどがあります。

Stackは後で追加したデータから順に取り出す場合に使い、

Queueは最初に追加したデータから順に取り出す場合に使います。

 

終わりに

今回は配列よりも使いそうなList型やDictionary型のお勉強でした。

またnew演算子が出てきてますね。

このnew演算子がとても嫌いです。

これがあることによって頭の中がぐちゃってなります。

まぁ、勉強して慣れてくればいいのですが。。。

 

C#初心者におすすめの本です。

この本は、すべてカラーで書かれており、

重要そうな部分はマーカーが引いてあったり、太字があったり、

絵や図がふんだんにあり、余白の使い方もとても見やすくしており、

初心者には読みやすい本となっています。

これからC#やってみようかなって人は、

本屋で一度見てみてください。初心者が初心者におすすめできる本です。

 

それではまた次回。

 

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

コメントを残す

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