Section 15.6. Copying from a Collection Type to an Array

   

15.6 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.

For example, 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 preexisting array. Example 15-6 modifies Example 15-5 to demonstrate both methods. The listing is followed by a complete analysis.

Example 15-6. Copying from Stack to an array
 Option Strict On 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( ) = intStack.ToArray( ) 
   


Learning Visual Basic. NET
Learning Visual Basic .Net
ISBN: 0596003862
EAN: 2147483647
Year: 2002
Pages: 153
Authors: Jesse Liberty

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net