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.
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( )
|
|
| Top |