あなたはその後、シャッフルリストを反復処理することができますFisher-Yates Shuffle
Shared r = New Random() ' must not create new Random each time
Public Shared Function Shuffle(Of T)(source As IEnumerable(Of T)) As IEnumerable(Of T)
Dim n = source.Count()
Dim a(n - 1) As T
For i = 0 To n - 1
Dim j = r.Next(0, i + 1)
If i <> j Then
a(i) = a(j)
End If
a(j) = source(i)
Next
Return a
End Function
に基づいてシャッフルするこの一般的な機能を使用します。反復処理の場合、アイテムを削除する必要はありません。
Dim source = My.Computer.FileSystem.GetFiles("C:/")
Dim result = Shuffle(source)
For Each r In result
' process file
Next
出典
2017-09-28 14:53:26
djv
Sweet!いい案。この場合、どのようなシャッフル方法をお勧めしますか? –
うわー、シャフリングが複雑なのかどうか分からないのは、リストから各ファイルを単に削除するよりも効率的です。 –
ですが、 'List'は**リンクされていない**です。 List.Remove()またはList.RemoveAt()を呼び出すと、正しいサイズの新しいバッファが割り当てられ、すべての要素が新しいバッファにコピーされます。はい、あなたはあなた自身のシャッフルを書く必要があります - フレームワークは本当にこれを箱の中に入れておくべきです(しかし、フィッシャー・イェイツのためのGoogleだけで、それを行う方法を示すたくさんのサンプルコードが見つかりますあまりにも大騒ぎすることなく。 –