【问题标题】:Issue to randomize the content of an Array type随机化 Array 类型的内容的问题
【发布时间】:2013-06-09 05:06:04
【问题描述】:

我有这段代码来随机化字符串数组的内容:

Public Function Randomize_Array(ByVal array() As String) As Array
    Return array.OrderBy(Function() Array_randomizer.Next).ToArray
End Function

问题是我需要重载以随机化整数(或任何其他类型的数组),重要提示:我需要保留数组的类型(我的意思是不要将整数数组转换为字符串数组随机化时)

这是我尝试过的:

Dim IntArray As Array = {1, 2, 3}
Randomize_Array(IntArray)

Dim Array_randomizer As New Random

' The Overload does not works
Public Function Randomize_Array(ByVal array As Array) As Array
    Return array.OrderBy(Function() Array_randomizer.Next).ToArray
End Function

【问题讨论】:

    标签: .net arrays vb.net


    【解决方案1】:

    你可以这样做:

    Public Function Randomize_Array(ByVal array As Array) As Array
        Return array.Cast(Of Object).OrderBy(Function() Array_randomizer.Next).ToArray
    End Function
    

    或者对于通用解决方案:

    Public Function Randomize_Array(Of T)(ByVal array As T()) As T()
        Return array.OrderBy(Function() Array_randomizer.Next).ToArray
    End Function
    

    您可能还对 'Fisher-Yates algorithm' 感兴趣,它会在原地打乱数组元素而不创建新数组(因此效率更高)。它看起来像这样:

    Public Sub Shuffle(ByVal array As Array)
        Dim randomizer As New Random
        For i As Integer = array.Length To 1 Step -1
            Dim j As Integer = randomizer.Next(i)
            Dim tmp As Object = array(j)
            array(j) = array(i - 1)
            array(i - 1) = tmp
        Next
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2014-09-15
      • 1970-01-01
      • 2011-08-01
      • 1970-01-01
      相关资源
      最近更新 更多