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 |