2016-07-08 5 views
1

私はその中に24個の要素を持つ1次元配列を持っています。私はすべてをランダムな順序でループしたい。私は1から24までそれらをループする方法を知っていますが、すべての要素が選択されるまで、ランダムに選択し、次に別の方法などを選択する方法はありますか?配列のすべての要素をランダムな順序でループしますか?

私はVBのようなスクリプト言語(QAWizard)を使用していますので、アイデアやVBコードで十分でしょう。

+0

私はあなたがシャッフルを探していると思います* *。無作為な順番でループすることは、一度しか出てこないことを保証することはできません(「QA」が何らかのクイズを意味する場合は必須です)。 – Plutonix

+2

@Plutonix QA WizardのQAは品質保証の略です。それはソフトウェアをテストするための援助のようです。それは.Net言語のようではないので、私はOPアイデアやVBコードで十分だろうと確信していません。 – Blackwood

+0

@Blackwood - クイズゲームがたくさんあります時々投稿される質問。文脈はあまりありません。 OP:それが事実なら、適切なシャッフルが良いかもしれません。偏りのない結果を文書化/保証することが容易になります。 – Plutonix

答えて

1

あなたは、LINQを使用することができます。

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

For Each item In randomOrder 

Next 

Guidトリックは、このようなシャッフルアプローチを見て、コレクションを「ランダム化」するための最良の方法ではありません。https://stackoverflow.com/a/7513502/284240

2

あなたは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 
+1

'Random'は' Guid.NewGuid'よりも良いかもしれませんが、OPはローカル変数を使わないことを忘れないでください。あなたの 'Shared'アプローチは、アプリケーションがマルチスレッド化し始めるまでは問題ありません。次に、[this](http://stackoverflow.com/a/19271062/284240);-)のようなものが必要です。 –

+0

@TimSchmeiterさんの返信をありがとうございます。その部分を具体的に教えてください: "(Function(x)_rnd.next ())」? QA(品質保証)ウィザードは、そのような組み込み関数を持っていません。私はそれを自分で書く必要があります。あなたがそのことを手伝うことができたら、私はそれを感謝します。 –

関連する問題