簡體   English   中英

Collections.shuffle() 在 vb.net 中等效?

[英]Collections.shuffle() equivalent in vb.net?

vb.net 的java.util.Collections.shuffle()方法的等價物是什么? 我在 MSDN 上沒有找到類似的東西。 非常感謝幫助。

(據我所知)沒有內置的 .NET 函數,但是使用 Linq 可以輕松編寫通用的等效函數:

Function Shuffle(Of T)(collection As IEnumerable(Of T)) As List(Of T)
    Dim r As Random = New Random()
    Shuffle = collection.OrderBy(Function(a) r.Next()).ToList()
End Function

調用此函數會為輸入列表中的每個元素分配一個隨機值,然后按該隨機數排序,返回一個新的(混洗的)列表。

如果集合是數組或派生自IList ,則性能更高的方法可能是使用Fisher-Yates 算法就地打亂列表:

Sub Shuffle(Of T)(list As IList(Of T))
    Dim r As Random = New Random()
    For i = 0 To list.Count - 1
        Dim index As Integer = r.Next(i, list.Count)
        If i <> index Then
            ' swap list(i) and list(index)
            Dim temp As T = list(i)
            list(i) = list(index)
            list(index) = temp
        End If
    Next
End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM