Previous section   Next section

9.7 Copying from a Collection Type to an Array

The ArrayList, Queue, and Stack types contain overloaded CopyTo( ) and ToArray( ) methods for copying their elements to an array. The CopyTo( ) method copies its elements to an existing one-dimensional array, overwriting the contents of the array beginning at the index you specify. The ToArray( ) method returns a new array with the contents of the type's elements.

In the case of a Stack, ToArray( ) would return a new array containing the elements in the Stack. CopyTo( ) would copy the Stack over a pre-existing array. Example 9-17 modifies Example 9-16 to demonstrate both methods. The listing is followed by a complete analysis.

Example 9-17. Copying from a Stack to an array
Option Strict On
Imports System

Namespace StackDemo
    Class Tester

        Public Sub Run( )
            Dim intStack As New Stack( )

            'populate the array
            Dim i As Integer
            For i = 1 To 4
                intStack.Push((i * 5))
            Next i

            'display the Stack
            Console.WriteLine("intStack values:")
            DisplayValues(intStack)

            Const arraySize As Integer = 10
            Dim testArray(arraySize) As Integer

            'populate the array
            For i = 1 To arraySize - 1
                testArray(i) = i * 100
            Next i
            Console.WriteLine("Contents of the test array")
            DisplayValues(testArray)

            'copy the intStack into the new array, start offset 3
            intStack.CopyTo(testArray, 3)
            Console.WriteLine("TestArray after copy:  ")
            DisplayValues(testArray)

            'copy the entire source Stack 
            ' to a new standard array
            Dim myArray As Object( ) = intStack.ToArray( )

            'display the values of the new standard array.
            Console.WriteLine("The new array:")
            DisplayValues(myArray)
        End Sub 'Run

        Public Shared Sub DisplayValues(ByVal myCollection As IEnumerable)
            Dim o As Object
            For Each o In myCollection
                Console.WriteLine(o)
            Next o
        End Sub 'DisplayValues

        Shared Sub Main( )
            Dim t As New Tester( )
            t.Run( )
        End Sub 'Main
    End Class 'Tester

End Namespace 'StackDemo

Output:
intStack values:
20
15
10
5
Contents of the test array
0
100
200
300
400
500
600
700
800
900
0
TestArray after copy:
0
100
200
20
15
10
5
700
800
900
0
The new array:
20
15
10
5

You begin again by creating the Stack (intStack), populating it with integers, and displaying its contents using WriteLine( ):

Dim intStack As New Stack( )

'populate the array
Dim i As Integer
For i = 1 To 4
    intStack.Push((i * 5))
Next i

'display the Stack
Console.WriteLine("intStack values:")
DisplayValues(intStack)

You next create an array, populate it, and display its values:

Const arraySize As Integer = 10
Dim testArray(arraySize) As Integer

'populate the array
For i = 1 To arraySize - 1
    testArray(i) = i * 100
Next i
Console.WriteLine("Contents of the test array")
DisplayValues(testArray)

You are ready to copy the stack over the array. You do so with the CopyTo( ) method, passing in the array name, and the offset at which to begin the copy:

intStack.CopyTo( testArray, 3 )

This copies the four values from the stack over the array, starting at offset 3 (the fourth element in the array):

0
100
200
20
15
10
5
700
800
900

Rather than copying to an existing array, you are free to copy to a new array. You do this with the ToArray( ) method, which generates a properly sized new array to hold the contents of the stack:

Dim myArray As Object( ) = int

Stack.ToArray( )

  Previous section   Next section
Top