Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB7
Expertise: Advanced
Aug 10, 2002

A For Each statement that visits items in random order

At times you may need to process elements of an array, a collection, or a dictionary object in random order, for example when sampling a population or (more often) when writing a game, such as a card game. Here's a class that you can use in a For Each statement to randomly process all the elements of any data structure that implements the IEnumerable interface:

Class RandomIterator
    Implements IEnumerable

    ' a low-overhead ArrayList to store references
    Dim items As New ArrayList()

    Sub New(ByVal collection As IEnumerable, ByVal seed As Integer)
        ' load all the items in the ArrayList, but in random order
        Dim rand As New Random(seed)
        Dim o As Object
        For Each o In collection
            Items.Insert(Rand.Next(0, Items.Count + 1), o)
        Next
    End Sub

    Public Function GetEnumerator() As System.Collections.IEnumerator _
        Implements System.Collections.IEnumerable.GetEnumerator
        ' return the enumerator of the inner ArrayList
        Return items.GetEnumerator()
    End Function
End Class
This code shows how you can use the RandomIterator class to randomly process all the elements in a string array, but you can use it with collection and dictionaries alike:

Dim arr() As String = {"one", "two", "three", "four", "five" }
Dim s As String
' the sequence you obtain depends on the seed you pass as the 2nd argument
For Each s In New RandomIterator(arr, 1234)
    Console.WriteLine(s)
Next
This code produces the following sequence:

three
five
two
four
one
Francesco Balena
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap