【ハルシオンブログ】Dictionaryからデータを取り出す時はこうやって取り出すといいらしいよ?
こんにちは!
もう8月になってしまいましたね!夏真っ盛り!
暑いの嫌いです。坂内っす。
UnityでDictionaryって使ってますか?
Dictionary型のデータをまとめて取り出すときに、こんな感じで取り出しますよね。
他にもこんな感じでも取り出せます。
ちょっと両方の方法で実際に取り出してみましょう。
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)
で取り出した方が早いのでそっちを使いましょうということでした。
ちょっとしたメモでした。
では、あでゅ~ノシ
もう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)
« 【ハルシオンブログ】Hierarchyにあるシーンを取得する | 【ハルシオンブログ】リフレクションを使って別クラスのprivate変数にアクセスする。 »
コメント
| h o m e |