FC2ブログ
    05 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.» 07

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】Dictionaryからデータを取り出す時はこうやって取り出すといいらしいよ? 

    こんにちは!
    もう8月になってしまいましたね!夏真っ盛り!
    暑いの嫌いです。坂内っす。

    UnityでDictionaryって使ってますか?
    Dictionary型のデータをまとめて取り出すときに、こんな感じで取り出しますよね。

    Dictionary<int, int> dic = new Dictionaryint, int>();
    foreach (var data in dic) {
    val += data.Value;
    }



    他にもこんな感じでも取り出せます。


    Dictionary<int, int> dic = new Dictionary<int, int>();
    foreach (var key in dic.Keys) {
    val += dic[key];
    }


    ちょっと両方の方法で実際に取り出してみましょう。


    using System.Collections.Generic;
    using UnityEngine;

    public class Blog20210802 : MonoBehaviour
    {
    void Start()
    {
    var sw = new System.Diagnostics.Stopwatch();

    Dictionary<int, int> dic = new Dictionary<int, int>();
    // データ用意
    for (int i = 0; i < 10000000; i++) {
    dic.Add(i, i);
    }

    // DictionaryのValueをkeysを基点に取り出す
    long val = 0;
    sw.Start();
    foreach (var key in dic.Keys) {
    val += dic[key];
    }
    Debug.Log(val);
    sw.Stop();
    Debug.Log("時間 : " + sw.Elapsed);

    // DictionaryのValueを取り出す
    val = 0;
    sw.Restart();
    foreach (var data in dic) {
    val += data.Value;
    }
    Debug.Log(val);
    sw.Stop();
    Debug.Log("時間 : " + sw.Elapsed);

    }
    }



    10,000,000個Dictionaryにintを詰め込んで、全部取り出して足す処理。

    結果はこんな感じ。


    後者の
    foreach (var data in dic) {
    val += data.Value;
    }
    こっちのほうが断然早いですね。
    ということで、Dictionaryで全件取り出す場合は、
    foreach(var key in dic.keys)
    より
    foreach(var data in dic)
    で取り出した方が早いのでそっちを使いましょうということでした。

    ちょっとしたメモでした。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/815-4f4d2102
    この記事にトラックバックする(FC2ブログユーザー)