Browse Source

Minor array initialization optimization

Vsevolod Levitan 4 months ago
parent
commit
ac049afa74
2 changed files with 14 additions and 13 deletions
  1. 1 1
      Connect4/GameBoard.cs
  2. 13 12
      Extensions.cs

+ 1 - 1
Connect4/GameBoard.cs

@@ -135,7 +135,7 @@ public class GameBoard
 
     public GameBoard Clone()
     {
-        var newBoard = new GameBoard(dimensions, cells.CopyArrayBuiltIn());
+        var newBoard = new GameBoard(dimensions, cells.DeepCopy());
         return newBoard;
     }
 }

+ 13 - 12
Extensions.cs

@@ -4,35 +4,36 @@ namespace MinMaxAB;
 
 public static class Extensions
 {
-    public static T ChooseRandom<T>(this T[] source) => source[Random.Shared.Next(0, source.Length)];
     public static Player[][] Fill(int cols, int rows, Player value)
     {
         Player[][] array = new Player[cols][];
-        for (int i = 0; i < cols; i++)
+        var arr = new Player[rows];
+        for (int j = 0; j < rows; j++)
         {
-            var arr = new Player[rows];
-            for (int j = 0; j < rows; j++)
-            {
-                arr[j] = value;
-            }
-            array[i] = arr;
+            arr[j] = value;
+        }
+        array[0] = arr;
+        for (int i = 1; i < cols; i++)
+        {
+            array[i] = new Player[rows];
+            arr.CopyTo(array[i].AsSpan());
         }
 
         return array;
     }
 
-    public static Player[][] CopyArrayBuiltIn(this Player[][] source)
+    public static Player[][] DeepCopy(this Player[][] source)
     {
         var len = source.Length;
         var dest = new Player[len][];
 
-        for (var x = 0; x < len; x++)
+        for (var i = 0; i < len; i++)
         {
-            var inner = source[x];
+            var inner = source[i];
             var ilen = inner.Length;
             var newer = new Player[ilen];
             Array.Copy(inner, newer, ilen);
-            dest[x] = newer;
+            dest[i] = newer;
         }
 
         return dest;