从 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
我在 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