0

我在 Smalltalk 中有一个半年的项目要做,但我一直在从数组中选择一个随机元素。

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

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

4

1 回答 1

4

首先它是写成 Smalltalk 而不是 SmallTalk。

您需要考虑您要达到的目标。由于您没有指定您的 Smalltalk,我将使用我最了解的 Smalltalk/X-jv 分支。

您的评论表明您已经找到了atRandom应该按照您在问题中指定的方法:

atRandom
    "Return any random element from the receiver"

    ^ self atRandom:Random

    "
     #(1 2 3) atRandom

我已经在 Smalltalk/X 上尝试过,它按预期工作。

即使您在 Workspace 执行时,它也可以正常工作:

#('Alex' 'Bob' 'Frank' 'Samantha') atRandom.'Frank''Frank'是的结果print it

你可以用不同的方式来做,比如(这是次优的,因为它atRandom可以正常工作):

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

这使得 OrderedCollection 来自 Array 并随机洗牌并选择第一个位置。

您的方法可能如下所示:

randomName: nameArray
    ^ nameArray atRandom
于 2020-03-07T13:17:59.627 回答