HashSetで重複なしのリストを使ってみる(C#スクリプト)|Unityゲーム制作

今回はHashSet(重複無しのリスト)を利用してみます。Unityというより少しプログラム的なメモになります。

はじめに

HashSetを簡単に言うと、重複なしのリストです。

同じ値を入れたくないリストに利用すると便利になります。

簡単なスクリプトの例

まずは下記スクリプトを作成します。

using System.Collections.Generic;
using UnityEngine;

public class HashSetTest : MonoBehaviour
{
    public List<string> Fruits;

    private HashSet<string> HashSetcurrent = new HashSet<string>();

    private void Start()
    {
        HashSetcurrent.Clear();

        HashSetcurrent.Add(Fruits[0]);

        foreach (var item in HashSetcurrent)
        {
            Debug.Log(item);
        }
    }
}

スクリプトをオブジェクトに追加します。今回はカメラに追加しました。リスト型の「Fruits」には好きな果物を指定します。

実行すると、「HashSetcurrent」に0番目の果物(リンゴ)が追加されます。

スクリプトのStartを下記に変更します。

    private void Start()
    {
        HashSetcurrent.Clear();

        HashSetcurrent.Add(Fruits[0]);
        HashSetcurrent.Add(Fruits[0]);
        HashSetcurrent.Add(Fruits[2]);

        foreach (var item in HashSetcurrent)
        {
            Debug.Log(item);
        }
    }

0番目の果物(リンゴ)を2回追加していますが、1回しか追加されません。(重複が除外されるため)

通常のListを使った場合、重複したくない場合はチェックが必要になるので、簡単になりますね。

他のメソッドを確認

主なメソッドを記載したのが下記のスクリプトです。

using System.Collections.Generic;
using UnityEngine;

public class HashSetTest : MonoBehaviour
{
    public List<string> Fruits;

    private HashSet<string> HashSetcurrent = new HashSet<string>();

    private void Start()
    {
        // 全て削除
        HashSetcurrent.Clear();

        // 追加
        HashSetcurrent.Add(Fruits[0]);
        HashSetcurrent.Add(Fruits[0]);
        HashSetcurrent.Add(Fruits[2]);

        // 削除
        HashSetcurrent.Remove(Fruits[0]);

        // 要素数を取得
        Debug.Log(HashSetcurrent.Count);

        // 指定要素があるか確認
        Debug.Log(HashSetcurrent.Contains(Fruits[1]));
    }
}

実行すると下記のような感じになります。

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