VB.Net Tutorial/Collections/Array Class

Материал из VB Эксперт
Перейти к: навигация, поиск

Array.Copy: Copy elements by position

<source lang="vbnet">Public Class Tester

   Public Shared Sub Main
       Dim arrayA() As String = {"One", "Two", "Three", "Four", "Five", "Six"}
       Console.WriteLine(Join(arrayA, ","))
       Dim arrayB() As String = {"A", "B", "C", "D", "E", "E", "F", "G", "H"}
       Console.WriteLine(Join(arrayB, ","))
       " ----- Make a reference copy.
       Dim arrayC() As String = arrayA
       Console.WriteLine(Join(arrayC, ","))
       " ----- Copy elements by position.
       Array.Copy(arrayB, 0, arrayA, 1, 3)
       Console.WriteLine(Join(arrayA, ","))
   End Sub

End Class</source>

One,Two,Three,Four,Five,Six
A,B,C,D,E,E,F,G,H
One,Two,Three,Four,Five,Six
One,A,B,C,Five,Six

Array.CreateInstance(GetType(Integer), 11)

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim values As Array = _
           Array.CreateInstance(GetType(Integer), 11)
       For i As Integer = 0 To 10
           values.SetValue(i, i)
       Next i
  End Sub
  

End class</source>

Array.CreateInstance(GetType(String), 10)

<source lang="vbnet">Option Strict On Imports System.Collections.Generic Public Module TypeNameFunction

  Public Sub Main()
     Console.WriteLine(TypeName(2 + 1.34))            " displays Double
     
     Dim arr1 As Array = Array.CreateInstance(GetType(String), 10)
     Console.WriteLine(TypeName(arr1))
     Dim stringArray(10) As String
     Console.Writeline(TypeName(stringArray))
     Dim sl As New SortedList(Of String, String)
     Console.WriteLine(TypeName(sl))
  End Sub

End Module</source>

Double
String()
String()
SortedList(Of String,String)

Array.GetLength, Array.GetUpperBound

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim aryStatistics(14, 4) As Integer
       Console.WriteLine("RANK: " & aryStatistics.Rank) "Dimensions in array.
       Console.WriteLine("TOTAL ELEMENTS: " & aryStatistics.Length) "Total elements in array.
       Console.WriteLine("ELEMENTS IN FIRST: " & aryStatistics.GetLength(0)) "Elements in first dimension.
       Console.WriteLine("ELEMENTS IN SECOND: " & aryStatistics.GetLength(1)) "Elements in second dimension.
       Console.WriteLine("LAST INDEX IN FIRST: " & aryStatistics.GetUpperBound(0)) "Last index in the first dimension.
       Console.WriteLine("LAST INDEX IN SECOND: " & aryStatistics.GetUpperBound(1)) "Last index in the second dimension.
  End Sub

End class</source>

RANK: 2
TOTAL ELEMENTS: 75
ELEMENTS IN FIRST: 15
ELEMENTS IN SECOND: 5
LAST INDEX IN FIRST: 14
LAST INDEX IN SECOND: 4

Array.IndexOf

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim values(10) As Integer
       For i As Integer = 0 To 10
           values(i) = i
       Next i
       Console.WriteLine(Array.IndexOf(values, 6).ToString)
  End Sub
  

End class</source>

6

Array.LastIndexOf

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim values(10) As Integer
       For i As Integer = 0 To 10
           values(i) = i
       Next i
       Console.WriteLine(Array.LastIndexOf(values, 3).ToString)
  End Sub
  

End class</source>

3

Array SetValue and GetValue

<source lang="vbnet">Imports System.Collections.Generic public class Test

  public Shared Sub Main
       Dim squares As Array = Array.CreateInstance(GetType(Integer), 11)
       For i As Integer = 0 To 10
           squares.SetValue(i * i, i)
       Next i
       For i As Integer = 0 To 10
           Console.WriteLine(squares.GetValue(i).ToString)
       Next i
  End Sub
  

End class</source>

0
1
4
9
16
25
36
49
64
81
100

Copy array elements from one array to another

<source lang="vbnet">Module Tester

   Sub Main()
       Dim Values() As Integer = {100, 200, 300, 400, 500}
       Dim MyValues(5) As Integer
       Dim Prices() As Double = {25.5, 4.95, 33.4}
       Dim I As Integer
       For I = 0 To 4
           Console.Write(Values(I) & " ")
       Next
       Console.WriteLine()
       " Copy one array to another
       Values.CopyTo(MyValues, 0)
       For I = 0 To 4
           Console.Write(MyValues(I) & " ")
       Next
   End Sub

End Module</source>

100 200 300 400 500
100 200 300 400 500

Get Enumerator from array

<source lang="vbnet">Imports System.Collections Module Module1

   Sub Main()
       Dim StringArray() As String = {"This", "is", "a", "test"}
       Dim E As IEnumerator = StringArray.GetEnumerator()
   
       While (E.MoveNext())
         Console.WriteLine(E.Current())
       End While
   
       Dim AnArray(5) As Array
       AnArray(0) = StringArray
       Console.WriteLine(CType(AnArray(0), String())(0))
   
   
   End Sub

End Module</source>

This
is
a
test
This

One dimensional Array with Array.CreateInstance

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim start_time As DateTime
       Dim stop_time As DateTime
       Dim elapsed_time As TimeSpan
       Dim num_items As Integer = 10000
       " One-dimensional Array.
       Dim array3 As Array = _
           Array.CreateInstance(GetType(Integer), num_items)
       start_time = Now
       For i As Integer = 0 To num_items - 1
           array3.SetValue(i, i)
       Next i
       stop_time = Now
       elapsed_time = stop_time.Subtract(start_time)
       Console.WriteLine(elapsed_time.TotalSeconds())
       
       Erase array3
  End Sub
  

End class</source>

0

Reverse array elements

<source lang="vbnet">Module Tester

   Sub Main()
       Dim Values() As Integer = {100, 200, 300, 400, 500}
       Dim MyValues(5) As Integer
       Dim Prices() As Double = {25.5, 4.95, 33.4}
       Dim I As Integer
       For I = 0 To 4
           Console.Write(Values(I) & " ")
       Next
       Console.WriteLine()
       Values.Reverse(Values)
       For I = 0 To 4
           Console.Write(Values(I) & " ")
       Next
       Console.WriteLine()
   End Sub

End Module</source>

100 200 300 400 500
500 400 300 200 100

Two-dimensional Array with Array.CreateInstance

<source lang="vbnet">public class Test

  public Shared Sub Main
       Dim start_time As DateTime
       Dim stop_time As DateTime
       Dim elapsed_time As TimeSpan
       Dim num_items As Integer = 10000
       " Two-dimensional Array.
       Dim array4 As Array = _
           Array.CreateInstance(GetType(Integer), 1, num_items)
       start_time = Now
       For i As Integer = 0 To num_items - 1
           array4.SetValue(i, 0, i)
       Next i
       stop_time = Now
       elapsed_time = stop_time.Subtract(start_time)
       Console.WriteLine(elapsed_time.TotalSeconds())
       Erase array4
  End Sub
  

End class</source>

0

Use Array.Sort() to sort object array

<source lang="vbnet">Imports System Module MyModule

 Sub Main()
   Dim salaries(4) As Salary
   salaries(0) = New Salary(9)
   salaries(1) = New Salary(4)
   salaries(2) = New Salary(8)
   salaries(3) = salaries(2)
   salaries(4) = New Salary(6)
   Console.WriteLine("Unsorted array:")
   Dim salary As Salary
   For Each salary In salaries
     Console.WriteLine("{0}", salary)
   Next
   Array.Sort(salaries)
   Console.WriteLine(vbCrLf & "Sorted array:")
   For Each salary In salaries
     Console.WriteLine("{0}", salary)
   Next
 End Sub

End Module Structure Salary

 Implements IComparable
 Private value As Integer
 Public Sub New(ByVal amount As Double)
   Me.value = CInt(amount * 100)
 End Sub
 Public Function CompareTo(ByVal other As Object) As Integer Implements IComparable.rupareTo
   Dim m2 As Salary = CType(other, Salary)
   If Me.value < m2.value Then
     Return -1
   ElseIf Me.value = m2.value Then
     Return 0
   Else
     Return +1
   End If
 End Function
 Public Overrides Function ToString() As String
   Return Me.value
 End Function

End Structure</source>

Unsorted array:
900
400
800
800
600
Sorted array:
400
600
800
800
900