从 Smalltalk 中的数组中选择随机元素

Pick random element from array in Smalltalk

我在 Smalltalk 中有一个半学期的项目要完成,但我在从数组中选择随机元素时遇到了困难。

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

现在我需要从数组中随机选择一个名称。我找到了 Random 函数,但不知道它是如何工作的。 有人帮忙吗? 谢谢!

首先是写的是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.

这从 Array 生成 OrderedCollection 并随机洗牌并选择第一个位置。

您的方法可能如下所示:

randomName: nameArray
    ^ nameArray atRandom