Следует иметь в виду, что если вы пытаетесь генерировать случайные числа в пределах диапазона, но не имеете дубликатов, вам необходимо убедиться, что диапазон случайных чисел по крайней мере равен размеру целевого массива.,
Например, если вы пытаетесь сгенерировать массив размером 12 с диапазоном от 0..10, это невозможно сделать, так как существует только 11 возможностей.
В зависимости от ваших требований (диапазон от 0 до размера массива?), Если пространство чисел мало, вы можете немного упростить это, перетасовав список из rangeStart..rangeEnd
:
/**
* Generates an array of unique random numbers between zero and the larger of
* arraySize or upperBound. If upperBound is not specified, it defaults to be
* arraySize.
*
* @param arraySize the size of the returned integer array
* @param upperBound an optional upper bound for the range of random numbers
*/
fun generateArray(arraySize: Int, upperBound: Int = size): IntArray {
return (0..Math.max(upperBound, arraySize)).shuffled().take(arraySize).toIntArray()
}
Это также позволяет избежать расточительного генерирования отброшенных дубликатов случайных чисел и гарантирует, что вызов функции занимает определенное количество времени для выполнения.