【问题标题】:Loop through all elements of an array in random order?以随机顺序循环遍历数组的所有元素?
【发布时间】:2016-07-08 15:12:13
【问题描述】:

我有一个一维数组,里面有 24 个元素。我想以随机顺序遍历所有这些。我知道如何从 1 到 24 循环它们,但是如何随机选择一个然后另一个等等,直到所有元素都被选中?

我正在使用类似 VB 的脚本语言 (QAWizard),所以我认为任何想法或 VB 代码都足够了。

【问题讨论】:

  • 认为您正在寻找随机播放。以随机顺序循环并不能保证一个只出现一次(如果“QA”意味着某种测验,我认为这是必不可少的)。
  • @Plutonix 我认为 QA Wizard 中的 QA 代表质量保证。它似乎是测试软件的辅助工具。它似乎不是 .Net 语言,所以我不相信 OP 的断言“任何想法或 VB 代码就足够了”是正确的..
  • @Blackwood 可能是 - 不时会发布很多问答游戏问题。没有给出很多上下文。 OP:如果是这样,适当的洗牌可能会更好。更容易记录/保证无偏见的结果。
  • 创建一个索引列表,对其进行洗牌,遍历它以索引到您的数组中。您的原始列表未受影响 - 改组可能会很昂贵。
  • 感谢您的回复,@plutonix、@Blackwood、@Andrew Morton。 QA(质量保证)向导是一个自动测试工具,用于软件测试目的,它是一种类似于 VB 的脚本语言,不是问答游戏,哈哈,我的错。问题是它不知道t have lots of build-in functions like shuffle, it supports basic loop, condition, JSON, So, I dont 如果你只是给我一个“随机播放”,如果我能看到一些逻辑,那么我会编写一些内置函数并将其转移到语言中。那么你能更具体地了解一下这个洗牌吗?谢谢,@plutonix,@Blackwood,@Andrew Mor

标签: .net arrays vb.net loops random


【解决方案1】:

您可以使用 LINQ 的 OrderByRandom.Next 随机订购:

Private Shared _rnd As New Random

Private Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
    Dim arr As Integer() = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    For Each value In arr.OrderBy(Function(x) _rnd.Next())
        Debug.WriteLine(value)
    Next

End Sub

【讨论】:

  • Random 可能比Guid.NewGuid 更好,但 OP 必须记住不要使用局部变量。在应用程序开始多线程之前,您的 Shared 方法很好。然后你需要类似this ;-)
  • 感谢@TimSchmeiter 的回复,能否详细说明一下:“(Function(x)_rnd.next())”? QA(质量保证)向导,如果您能提供帮助,请不要t have the build-in function like that, I need to write it myself. so Id 感激不尽
【解决方案2】:

你可以使用 LINQ:

Dim randomOrder = From item In yourArray Order By Guid.NewGuid()

For Each item In randomOrder

Next

Guid 技巧并不是“随机化”集合的最佳方式,请看一下这样的随机播放方法:https://stackoverflow.com/a/7513502/284240

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多