我有一個檔案夾,里面有很多檔案。大約在 1000 到 15000 之間。
我需要從這個檔案夾中隨機挑選 1000 個檔案并將其復制到另一個檔案夾中。我知道如何通過在陣列中插入檔案串列然后隨機選擇一個來從檔案夾中獲取單個隨機檔案,但不知道如何在避免兩次選擇同一個檔案的同時獲取多個檔案。
例如,如果我的檔案夾中有 1001 個檔案,那么獲取前幾個檔案不會有任何問題,但是到最后,很可能會選擇一個已經復制過來的檔案,并且需要多次嘗試才能找到例如最后一個檔案只是運氣...
我的第一個想法是將檔案數除以 1000。例如 1500/1000 = 1.5。然后創建一個介于 0 和 1.5 之間的隨機整數。這將回傳 1。然后在第 n 個影像和第 n 個影像 * 1.5 之間執行下一個 rand。
如果檔案夾有 15000 個檔案,它將在 1 到 15 之間隨機選擇第一個檔案,然后在 6 到 30 之間隨機選擇第一個檔案,依此類推。
但必須有一個更聰明的解決方案。
任何幫助表示贊賞
uj5u.com熱心網友回復:
您可以隨機訂購它們:
Dim allFiles = Directory.EnumerateFiles("path")
Dim rnd As New Random()
Dim random1000 = From f In allfiles
Order By rnd.Next()
Select f
Take 1000
Dim list = random1000.ToList()
這是使用System.Linq
uj5u.com熱心網友回復:
在檔案串列中使用索引
Private Shared prng As New Random
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ListOfiles() As String = IO.Directory.GetFiles(BasePath)
Dim indices As IEnumerable(Of Integer)
indices = Enumerable.Range(0, ListOfiles.Length).OrderBy(Function() prng.Next).Take(1000)
For Each idx As Integer In indices
Dim fn As String = ListOfiles(idx)
Stop
Next
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/437679.html
上一篇:如何在pythontkinter中為*、#等符號設定自定義顏色
下一篇:如何排除部分影像[VB.NET]
