2013-06-09 2 views
0

Я получил этот код, чтобы рандомизации содержимое массива строки:Выдать рандомизации содержание типа массива

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 

ответ

1

Y ожно сделать это:

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 
+0

спасибо, так много. – pitoloko

Смежные вопросы