-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArray.Generators.cs
128 lines (111 loc) · 4.94 KB
/
Array.Generators.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
namespace ABCNET.Utils
{
/// <summary>
/// Предоставляет функционал для работы с массивами.
/// </summary>
public static partial class Array
{
#region public
/// <summary>
/// Создаёт массив из указанных значений.
/// </summary>
/// <param name="values">Значения.</param>
/// <returns>Массив.</returns>
public static T[] Of<T>(params T[] values)
{
if (values == null)
throw new ArgumentNullException(nameof(values));
return values;
}
/// <summary>
/// Создаёт массив на основе функции селектора.
/// </summary>
/// <param name="count">Количество элементов.</param>
/// <param name="selector">Функция селектор.</param>
/// <param name="firstIndex">Начальный индекс.</param>
/// <returns>Массив.</returns>
public static T[] By<T>(int count, Func<int, T> selector, int firstIndex = 0)
{
if (count < 0)
throw new ArgumentOutOfRangeException(nameof(count));
if (selector == null)
throw new ArgumentNullException(nameof(selector));
T[] source = new T[count];
for (int i = 0; i < source.Length; i++)
source[i] = selector(i + firstIndex);
return source;
}
/// <summary>
/// Создаёт массив на основе функции селектора.
/// </summary>
/// <param name="count">Количество элементов.</param>
/// <param name="first">Первый элемент.</param>
/// <param name="next">Функция получения следующего элемента.</param>
/// <returns>Массив.</returns>
public static T[] By<T>(int count, T first, Func<T, T> next)
{
if (count < 0)
throw new ArgumentOutOfRangeException(nameof(count));
if (next == null)
throw new ArgumentNullException(nameof(next));
T[] source = new T[count];
source[0] = first;
for (int i = 1; i < source.Length; i++)
source[i] = next(source[i - 1]);
return source;
}
/// <summary>
/// Создаёт массив случайных чисел типа Int32.
/// </summary>
/// <param name="count">Количество элементов.</param>
/// <param name="low">Нижняя граница диапазона.</param>
/// <param name="high">Верхняя граница диапазона.</param>
/// <returns>Массив.</returns>
public static int[] Random(int count, int low = Int32BordersHelper.Low, int high = Int32BordersHelper.High)
{
if (count < 0)
throw new ArgumentOutOfRangeException(nameof(count));
if (low > high)
throw new ArgumentException(nameof(low));
int[] source = new int[count];
for (int i = 0; i < source.Length; i++)
source[i] = Base.Random(low, high);
return source;
}
/// <summary>
/// Создаёт массив случайных чисел типа Double.
/// </summary>
/// <param name="count">Количество элементов.</param>
/// <param name="low">Нижняя граница диапазона.</param>
/// <param name="high">Верхняя граница диапазона.</param>
/// <returns>Массив.</returns>
public static double[] Random(int count, double low = DoubleBordersHelper.Low, double high = DoubleBordersHelper.High)
{
if (count < 0)
throw new ArgumentOutOfRangeException(nameof(count));
if (low > high)
throw new ArgumentException(nameof(low));
double[] source = new double[count];
for (int i = 0; i < source.Length; i++)
source[i] = Base.Random(low, high);
return source;
}
/// <summary>
/// Создаёт массив, заполненный указанным значением.
/// </summary>
/// <param name="count">Количество элементов.</param>
/// <param name="value">Значение.</param>
/// <returns>Массив.</returns>
public static T[] Fill<T>(int count, T value)
{
if (count < 0)
throw new ArgumentOutOfRangeException(nameof(count));
T[] source = new T[count];
for (int i = 0; i < source.Length; i++)
source[i] = value;
return source;
}
#endregion public
}
}