excel - 从一维数组中选择随机项目不重复
问题描述
我正在尝试使用此代码从一维数组中选择随机项
Sub Select_Random_Item_From_1D_Array()
Dim arr(), x As Long
arr = Array("Good", "Very Good", "Excellent")
Randomize
x = Int((UBound(arr) + 1) * Rnd + 1)
Debug.Print arr(x - 1)
End Sub
我怎样才能防止重复?我的意思是我需要随机选择所有项目,不要重复。如果选择了所有项目,则重置该过程。只是我需要随机选择所有项目
解决方案
您可以创建第二个Booleans
具有相同长度的数组。该数组仅用 初始化False
。如果 rand 选择了数组中的值,则将布尔数组匹配值设置为True
. 如果下一次的 rand 值是一个已经被选择的值(True
在布尔数组中带有 a ),请再次执行 rand
一步一步尝试这个小例子,你会看到逻辑:
Sub Select_Random_Item_From_1D_Array()
Dim arr(), x As Long, cpt As Long
Dim mBool(2) As Boolean
cpt = 0
arr = Array("Good", "Very Good", "Excellent")
Do While cpt < 3 '3 being the number of items in your array + 1 (from 0 to 2)
Randomize
x = Int((UBound(arr) + 1) * Rnd + 1)
If mBool(x - 1) = False Then
mBool(x - 1) = True
Debug.Print arr(x - 1)
cpt = cpt + 1
End If
Loop
End Sub
它将从您的数组中打印一个随机项目,并且每次这样做都会将第二个数组的匹配值从 更改False
为True
。然后它再次执行它,如果它已经被打印(如果布尔数组上的匹配值为True
),它会再次尝试。
我添加了一个名为 的变量cpt
,它从 0 到数组中的项目数,它使算法在一次打印所有项目时停止。
这可能不是他做你想做的最好的方式,但它很有效,而且并不复杂
推荐阅读
- python - 定义基于 gensim word2vec 的自定义 sklearn 转换器的问题
- mysql - 在谷歌应用引擎上上传的生产应用程序中的 Django-mysqlclient 版本错误?
- android - 在 WebView 中缓存 Progressive Web App
- javascript - 可以强制浏览器缓存 HTML 页面吗?
- java - 错误:在其他 7 个错误中预期为“.class”
- embedded - micro C 中不允许重入
- python - 从单个文件中读取多个文件的路径
- mysql - 从另一个表sql填充数据
- html - 项目列表中最后一项的边距底部
- notepad++ - 为什么 HTML 标签会被 '+AD-' 取代?