Как сформировать список случайных чисел? - PullRequest
55 голосов
/ 01 февраля 2012

Это может быть наименее важный вопрос Скалы, но он беспокоит меня.Как бы я сгенерировал список из n случайных чисел.То, что у меня есть до сих пор:

def n_rands(n : Int) = {
 val r = new scala.util.Random
 1 to n map { _ => r.nextInt(100) } 
}

Что работает, но для меня не очень скарифицирует.Я открыт для предложений.

РЕДАКТИРОВАТЬ

Не потому, что это важно, так как забавно и очевидно в ретроспективе, похоже, что работает следующее:

1 to 20 map r.nextInt

Но индекс каждой записи в возвращаемом списке также является верхней границей последней.Первое число должно быть меньше 1, второе меньше 2 и так далее.Я запустил его три или четыре раза и заметил: «Хм, результат всегда начинается с 0 ...»

Ответы [ 3 ]

90 голосов
/ 01 февраля 2012

Вы можете использовать решение Дона или:

Seq.fill(n)(Random.nextInt)

Обратите внимание, что вам не нужно создавать новый объект Random, вы можете использовать объект-компаньон по умолчанию Random, как указано выше.

34 голосов
/ 01 февраля 2012

Как насчет:

import util.Random.nextInt
Stream.continually(nextInt(100)).take(10)
5 голосов
/ 01 февраля 2012

относительно вашего редактирования,

nextInt может принимать аргумент Int в качестве верхней границы для случайного числа, поэтому 1 to 20 map r.nextInt совпадает с 1 to 20 map (i => r.nextInt(i)), а не с более полезной ошибкой компиляции.

1 to 20 map (_ => r.nextInt(100)) делает то, что вы хотели. Но лучше использовать Seq.fill, поскольку это более точно отражает то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...