Если на самом деле вам нужны цифры от 1 до 24 в случайном порядке, то я бы предложил следующее:
Dim rng As New Random
Dim numbers = Enumerable.Range(1, 24).OrderBy(Function(n) rng.NextDouble())
Вы можете добавить ToArray
вызов в конец этой второй строки, если Вы хотите, чтобы случайные числа в массиве. В основном это генерирует случайное значение для представления каждого числа, а затем сортирует числа по этим случайным значениям. Это очень похоже на перегрузку Array.Sort
, которая сортирует два параллельных массива, используя один из них в качестве ключей для сортировки другого. Если вы хотите сделать это вручную, это будет выглядеть так:
Dim rng As New Random
Dim numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24}
Dim keys = {rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble(),
rng.NextDouble()}
Array.Sort(keys, numbers)
Если вы хотите, чтобы эти числа представляли собой один String
, разделенный трубами, сделайте это:
Dim text = String.Join("|", numbers)
Вам не нужен вызов ToArray
, чтобы сделать это, поскольку String.Join
примет IEnumerable(Of T)
.
Если вам интересно, я использовал NextDouble
вместо Next
, потому что это является более эффективным. При генерации случайного Integer
в диапазоне первым шагом является генерация случайного Double
, который затем масштабируется и округляется. Поскольку эти значения используются только для сортировки, важна их случайность, а не их фактические значения. Таким образом, дополнительные шаги по масштабированию и округлению каждого случайного Double
не имеют смысла.