コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Array.Contains と HashSet.Contains の速度比較

検証用スクリプト

using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using UnityEngine;
using Debug = UnityEngine.Debug;

public class Example : MonoBehaviour
{
    private void Start()
    {
        var count   = 10000;
        var value   = count - 1;
        var array    = Enumerable.Range( 0, count ).ToArray();
        var hashSet = new HashSet<int>( array );

        var sw1 = new Stopwatch();
        sw1.Start();

        for ( int i = 0; i < count; i++ )
        {
            var result = array.Contains( value );
        }

        sw1.Stop();

        var sw2 = new Stopwatch();
        sw2.Start();

        for ( int i = 0; i < count; i++ )
        {
            var result = hashSet.Contains( value );
        }

        sw2.Stop();

        Debug.Log( sw1.Elapsed.TotalSeconds );
        Debug.Log( sw2.Elapsed.TotalSeconds );
    }
}

配列と HashSet に10,000 個の要素を格納して
末尾の項目を Contains で取得するまでにかかる時間を検証

検証結果

メソッド かかった時間
Array.Contains 18.810 秒
HashSet.Contains 0.001 秒