Выбрать случайный элемент из массива в Smalltalk - PullRequest
0 голосов
/ 07 марта 2020

У меня есть полугодовой проект в Smalltalk, но я застрял в выборе случайного элемента из массива.

array = #('Alex' 'Bob' 'Frank' 'Samantha').
^"RandomChoice"

И теперь мне нужно выбрать случайное имя из массива. Я нашел функцию Random, но не знаю, как она работает. Кто-нибудь поможет? Спасибо!

1 Ответ

4 голосов
/ 07 марта 2020

Прежде всего написано Smalltalk, а не SmallTalk.

Вам нужно подумать о том, чего вы пытаетесь достичь. Поскольку вы не указали свой Smalltalk, я буду использовать тот, который я знаю больше всего, из ветки Smalltalk / X-jv.

Ваш комментарий показывает, что вы нашли метод atRandom, который должен работать как вы указал в вашем вопросе:

atRandom
    "Return any random element from the receiver"

    ^ self atRandom:Random

    "
     #(1 2 3) atRandom

Я пробовал его на Smalltalk / X, и он работает, как ожидалось.

Даже с вашим при выполнении в рабочей области он работает правильно:

#('Alex' 'Bob' 'Frank' 'Samantha') atRandom.'Frank' ('Frank' - результат print it)

Вы можете сделать это по-другому, например (это неоптимально, так как atRandom работает правильно):

(#('Alex' 'Bob' 'Frank' 'Samantha') asOrderedColletion randomShuffle) at: 1.

Это делает OrderedCollection из массива, случайным образом перемешивает его и выбирает первую позицию.

Ваш метод может выглядеть следующим образом:

randomName: nameArray
    ^ nameArray atRandom
...