Extensions.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Connect4;
  2. namespace MinMaxAB;
  3. public static class Extensions
  4. {
  5. /// <summary>
  6. /// Заполнить двумерный массив заданным значением
  7. /// </summary>
  8. /// <param name="cols">Количество столбцов в массиве</param>
  9. /// <param name="rows">Количество строк в массиве</param>
  10. /// <param name="value">Значение, которое установить во все ячейки</param>
  11. /// <returns>Новый двумерный массив, заполненный заданным значением</returns>
  12. public static Player[][] Fill(int cols, int rows, Player value)
  13. {
  14. Player[][] array = new Player[cols][];
  15. var arr = new Player[rows];
  16. for (int j = 0; j < rows; j++)
  17. {
  18. arr[j] = value;
  19. }
  20. array[0] = arr;
  21. for (int i = 1; i < cols; i++)
  22. {
  23. array[i] = new Player[rows];
  24. arr.CopyTo(array[i].AsSpan());
  25. }
  26. return array;
  27. }
  28. /// <summary>
  29. /// Скопировать двоичный массив
  30. /// </summary>
  31. /// <param name="source">Исходный массив</param>
  32. /// <returns>Новый двумерный массив с такими же значениями</returns>
  33. public static Player[][] DeepCopy(this Player[][] source)
  34. {
  35. var len = source.Length;
  36. var dest = new Player[len][];
  37. for (var i = 0; i < len; i++)
  38. {
  39. var inner = source[i];
  40. var ilen = inner.Length;
  41. var newer = new Player[ilen];
  42. Array.Copy(inner, newer, ilen);
  43. dest[i] = newer;
  44. }
  45. return dest;
  46. }
  47. }