2013-06-09 1 views
0

배열 형식의 컨텐츠를 무작위하기 배열의 타입), 중요 : 나는 배열의 형태를 (무작위 때 문자열 배열에 정수 배열을 설정하지 않는 것을 의미) 유지하기 위해 필요한 것은문제는 내가 문자열 배열의 내용을 무작위로이 코드를 가지고

이것은 내가 무엇을 시도했다입니다 :

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 OU는이 작업을 수행 할 수 있습니다

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

관련 문제