Guest User

Untitled

a guest
Sep 3rd, 2026
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.01 KB | None | 0 0
  1. using Godot;
  2. using System;
  3. using System.Collections.Generic;
  4.  
  5. namespace Game;
  6. public partial class Main : Node2D
  7. {
  8.  
  9.     #region timer
  10.     private ulong _time;
  11.  
  12.     private void TimeStart()
  13.     {
  14.         _time = Time.GetTicksUsec();
  15.     }
  16.  
  17.     private string TimeStop(string prefix = "")
  18.     {
  19.         string Reverse(string s)
  20.         {
  21.             char[] chars = s.ToCharArray();
  22.             Array.Reverse(chars);
  23.             return new string(chars);
  24.         }
  25.         string Parse(string s, bool isReverse)
  26.         {
  27.             if (isReverse)
  28.                 s = Reverse(s);
  29.  
  30.             var r = new List<string>();
  31.  
  32.             for (int i = 0; i < s.Length; i++)
  33.             {
  34.                 if (i % 3 == 0 && i != 0)
  35.                     r.Add("_");
  36.  
  37.                 r.Add(s[i].ToString());
  38.             }
  39.  
  40.             if (isReverse)
  41.                 r.Reverse();
  42.  
  43.             return string.Join("", r);
  44.         }
  45.  
  46.         double elapsed = (double)(Time.GetTicksUsec() - _time) / 1_000_000.0;
  47.  
  48.         string t = elapsed.ToString();
  49.  
  50.         if (t == "0")
  51.             t += ",0";
  52.  
  53.         string[] parts = t.Split(',');
  54.  
  55.         return prefix
  56.             + Parse(parts[0], true)
  57.             + "."
  58.             + Parse(parts[1], false);
  59.     }
  60.  
  61.  
  62.  
  63.     #endregion
  64.  
  65.  
  66.     private int once = 0;
  67.     private int count = 100_000;
  68.     private int sizeArr = 50;
  69.  
  70.     private int[] keyDel = [12, 24, 9, 15, 21];
  71.  
  72.     private List<int> list = [];
  73.     private Godot.Collections.Array<int> godotList = [];
  74.  
  75.  
  76.     public override void _Ready()
  77.     {
  78.         for (int i = 0; i < sizeArr; i++)
  79.         {
  80.             list.Add(i);
  81.             godotList.Add(i);
  82.         }
  83.  
  84.     }
  85.  
  86.  
  87.     public override void _Process(double delta)
  88.     {
  89.         once++;
  90.  
  91.         if (once == 120)
  92.         {
  93.             TestRawRemoveGodotList();
  94.             TestRawRemove();
  95.             TestSwap();
  96.             Info();
  97.         }
  98.     }
  99.  
  100.  
  101.     private void Info()
  102.     {
  103.         GD.Print();
  104.         GD.Print($"Кол-во итераций: {count}");
  105.         GD.Print($"Размер массива:  {sizeArr}");
  106.     }
  107.  
  108.  
  109.     public class SwapRemover
  110.     {
  111.         private int _size;
  112.         private List<int> _arr;
  113.  
  114.  
  115.         public void Setup(List<int> arr)
  116.         {
  117.             _arr = arr;
  118.             _size = arr.Count;
  119.         }
  120.  
  121.  
  122.         public void Remove(int index)
  123.         {
  124.             _size--;
  125.             _arr[index] = _arr[_size];
  126.         }
  127.  
  128.  
  129.         public void Add(int value)
  130.         {
  131.             if (_size < _arr.Count)
  132.                 _arr[_size] = value;
  133.             else
  134.                 _arr.Add(value);
  135.             _size++;
  136.         }
  137.     }
  138.  
  139.  
  140.     private void TestRawRemove()
  141.     {
  142.         List<int> arr = [.. list];
  143.  
  144.         TimeStart();
  145.  
  146.         for (int i = 0; i < count; i++)
  147.         {
  148.             for (int k = 0; k < keyDel.Length; k++)
  149.             {
  150.                 arr.RemoveAt(keyDel[k]);
  151.                 arr.Add(keyDel[k]);
  152.             }
  153.         }
  154.  
  155.         GD.Print(TimeStop("RAW_REMOVE C# List\t\t"));
  156.     }
  157.  
  158.  
  159.     private void TestSwap()
  160.     {
  161.         var arr = new SwapRemover();
  162.         arr.Setup([.. list]);
  163.  
  164.         TimeStart();
  165.  
  166.         for (int i = 0; i < count; i++)
  167.         {
  168.             for (int k = 0; k < keyDel.Length; k++)
  169.             {
  170.                 arr.Remove(keyDel[k]);
  171.                 arr.Add(keyDel[k]);
  172.             }
  173.         }
  174.  
  175.         GD.Print(TimeStop("SWAP C#\t\t\t\t\t"));
  176.     }
  177.  
  178.  
  179.     private void TestRawRemoveGodotList()
  180.     {
  181.         var arr = godotList.Duplicate();
  182.  
  183.         TimeStart();
  184.  
  185.         for (int i = 0; i < count; i++)
  186.         {
  187.             for (int k = 0; k < keyDel.Length; k++)
  188.             {
  189.                 arr.RemoveAt(keyDel[k]);
  190.                 arr.Add(keyDel[k]);
  191.             }
  192.         }
  193.  
  194.         GD.Print(TimeStop("RAW_REMOVE Godot List\t"));
  195.     }
  196.  
  197. }
  198.  
Advertisement
Add Comment
Please, Sign In to add comment