- using Godot;
- using System;
- using System.Collections.Generic;
-
- public partial class TestGridData : Node2D
- {
-
- public class TestGrid<T>
- {
- public TestGrid(int width)
- {
- Width = width;
- }
-
- public int Width { get; }
- private Dictionary<int, T> _dictionary = new Dictionary<int, T>();
-
- public void Set(int x, int y, T data)
- {
- if (x <= Width)
- {
- _dictionary[y * Width + x] = data;
- }
- }
-
- public T Get(int x, int y)
- {
- if (x <= Width && _dictionary.TryGetValue(y * Width + x, out var value))
- {
- return value;
- }
-
- return default;
- }
-
- public void ForEach(Action<int, int, T> callback)
- {
- foreach (var keyValuePair in _dictionary)
- {
- var index = keyValuePair.Key;
- callback(index % Width, index / Width, keyValuePair.Value);
- }
- }
- }
-
- public override void _Ready()
- {
- var time = DateTime.Now;
- var testGrid = new TestGrid<int>(100000);
- for (int i = 0; i < 1000; i++)
- {
- for (int j = 0; j < 1000; j++)
- {
- testGrid.Set(i, j, i + j);
- }
- }
- Debug.Log("TestGrid设置值用时: " + (DateTime.Now - time).Milliseconds);
-
- time = DateTime.Now;
- var testGrid2 = new InfiniteGrid<int>();
- for (int i = 0; i < 1000; i++)
- {
- for (int j = 0; j < 1000; j++)
- {
- testGrid2.Set(i, j, i + j);
- }
- }
- Debug.Log("Grid设置值用时: " + (DateTime.Now - time).Milliseconds);
-
- time = DateTime.Now;
- for (int i = 0; i < 1000; i++)
- {
- for (int j = 0; j < 1000; j++)
- {
- testGrid.Get(i, j);
- }
- }
- Debug.Log("TestGrid取值用时: " + (DateTime.Now - time).Milliseconds);
-
- time = DateTime.Now;
- for (int i = 0; i < 1000; i++)
- {
- for (int j = 0; j < 1000; j++)
- {
- testGrid2.Get(i, j);
- }
- }
- Debug.Log("Grid取值用时: " + (DateTime.Now - time).Milliseconds);
-
- time = DateTime.Now;
- testGrid.ForEach((i, i1, arg3) =>
- {
-
- });
- Debug.Log("TestGrid遍历用时: " + (DateTime.Now - time).Milliseconds);
-
- time = DateTime.Now;
- testGrid2.ForEach((i, i1, arg3) =>
- {
- return true;
- });
- Debug.Log("Grid遍历用时: " + (DateTime.Now - time).Milliseconds);
- }
- }