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

时间:2013-12-07 16:54:07

标签: java .net vb.net

vb.net的java.util.Collections.shuffle()方法的等价物是什么?我没有在MSDN上找到类似的东西。非常感谢帮助。

1 个答案:

答案 0 :(得分:5)

有(据我所知)没有内置的.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 algorithm来就地填充列表:

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