Tablice w Visual BasicArrays in Visual Basic

Tablica to zbiór wartości, które są określane jako elementy, które są logicznie powiązane ze sobą.An array is a set of values, which are termed elements, that are logically related to each other. Na przykład tablicy może składać się z liczby studentów każdej grupy zaszeregowania w liceum; Każdy element tablicy jest liczba uczniów w jednej klasy korporacyjnej.For example, an array may consist of the number of students in each grade in a grammar school; each element of the array is the number of students in a single grade. Podobnie Tablica może składać się z ocen studenta dla klasy; Każdy element tablicy jest jednej klasy korporacyjnej.Similarly, an array may consist of a student's grades for a class; each element of the array is a single grade.

Jest możliwe poszczególnych zmiennych do przechowywania wszystkich naszych elementów danych.It is possible individual variables to store each of our data items. Na przykład, jeśli nasza aplikacja analizuje ocen studentów, możemy użyć osobnej zmiennej dla każdego ucznia klasy korporacyjnej, takich jak englishGrade1, englishGrade2itp. Takie podejście ma trzy główne ograniczenia:For example, if our application analyzes student grades, we can use a separate variable for each student's grade, such as englishGrade1, englishGrade2, etc. This approach has three major limitations:

  • Musimy znać w czasie projektowania, dokładnie ile ocen mamy do obsługi.We have to know at design time exactly how many grades we have to handle.
  • Obsługę dużej liczby klas szybko staje się niewydolna.Handling large numbers of grades quickly becomes unwieldy. To z kolei sprawia, że aplikacja będzie mieć poważne błędy.This in turn makes an application much more likely to have serious bugs.
  • Jest trudne w utrzymaniu.It is difficult to maintain. Każdego nowe klasy korporacyjnej, które możemy dodać wymaga aplikacji można modyfikować, ponownie skompilowana i ponownego wdrażania.Each new grade that we add requires that the application be modified, recompiled, and redeployed.

Za pomocą tablicowego, możesz odwoływać się do tych powiązanych wartości o tej samej nazwie i użyć numeru, który jest nazywany indeksu lub indeks dolny do identyfikacji pojedynczego elementu na podstawie jego położenia w tablicy.By using an array, you can refer to these related values by the same name, and use a number that’s called an index or subscript to identify an individual element based on its position in the array. Indeksy tablicy z zakresu od 0 do jednego mniejsza niż całkowita liczba elementów w tablicy.The indexes of an array range from 0 to one less than the total number of elements in the array. Gdy używasz składni języka Visual Basic można zdefiniować rozmiar tablicy, należy określić jego najwyższy indeks nie całkowitą liczbę elementów w tablicy.When you use Visual Basic syntax to define the size of an array, you specify its highest index, not the total number of elements in the array. Możesz pracować z tablicy jako jednostki, a możliwość iterować jej elementy zwalnia musi wiedzieć dokładnie tak jak wiele elementów zawiera się on w czasie projektowania.You can work with the array as a unit, and the ability to iterate its elements frees you from needing to know exactly how many elements it contains at design time.

Przykłady szybkich przed wyjaśnienie:Some quick examples before explanation:

' Declare a single-dimension array of 5 numbers.
Dim numbers(4) As Integer

' Declare a single-dimension array and set its 4 values.
Dim numbers = New Integer() {1, 2, 4, 8}

' Change the size of an existing array to 16 elements and retain the current values.
ReDim Preserve numbers(15)

' Redefine the size of an existing array and reset the values.
ReDim numbers(15)

' Declare a 6 x 6 multidimensional array.
Dim matrix(5, 5) As Double

' Declare a 4 x 3 multidimensional array and set array element values.
Dim matrix = New Integer(3, 2) {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}, {4, 5, 6}}

' Declare a jagged array
Dim sales()() As Double = New Double(11)() {}

Elementy tablicy w prostej tablicyArray elements in a simple array

Utwórz tablicę o nazwie students do przechowywania liczby studentów każdej grupy zaszeregowania w liceum.Let's create an array named students to store the number of students in each grade in a grammar school. Indeksy zakres elementów z zakresu od 0 do 6.The indexes of the elements range from 0 through 6. Za pomocą tej tablicy jest prostsze niż zadeklarowanie siedmiu zmiennych.Using this array is simpler than declaring seven variables.

Poniższa ilustracja przedstawia students tablicy.The following illustration shows the students array. Dla każdego elementu tablicy:For each element of the array:

  • Indeks elementu reprezentuje grupę zaszeregowania (indeks 0 reprezentuje przedszkole).The index of the element represents the grade (index 0 represents kindergarten).

  • Wartość, która jest zawarta w elemencie reprezentuje liczbę studentów w tej klasie.The value that’s contained in the element represents the number of students in that grade.

Diagram przedstawiający tablicy liczb studentów

Poniższy przykład zawiera kod języka Visual Basic, który tworzy i używa tablicy:The following example contains the Visual Basic code that creates and uses the array:


Module SimpleArray
   Public Sub Main()
      ' Declare an array with 7 elements.
      Dim students(6) As Integer

      ' Assign values to each element.
      students(0) = 23
      students(1) = 19
      students(2) = 21
      students(3) = 17
      students(4) = 19
      students(5) = 20
      students(6) = 22
      
      ' Display the value of each element.
      For ctr As Integer = 0 To 6
         Dim grade As String = If(ctr = 0, "kindergarten", $"grade {ctr}")
         Console.WriteLine($"Students in {grade}: {students(ctr)}")
      Next
   End Sub
End Module
' The example displays the following output:
'     Students in kindergarten: 23
'     Students in grade 1: 19
'     Students in grade 2: 21
'     Students in grade 3: 17
'     Students in grade 4: 19
'     Students in grade 5: 20
'     Students in grade 6: 22

Przykład wykonuje trzy rzeczy:The example does three things:

  • Deklaruje students tablicy przy użyciu siedem elementów.It declares a students array with seven elements. Liczba 6 w tablicy deklaracja wskazuje, której ostatni indeks w tablicy; jest to jeden mniejsza niż liczba elementów w tablicy.The number 6 in the array declaration indicates the last index in the array; it is one less than the number of elements in the array.
  • Przypisuje wartości do każdego elementu w tablicy.It assigns values to each element in the array. Elementy tablicy są dostępne przy użyciu nazwy tablicy i tym indeks pojedynczego elementu w nawiasach.Array elements are accessed by using the array name and including the index of the individual element in parentheses.
  • Wyświetla listę każdej wartości w tablicy.It lists each value of the array. W przykładzie użyto For instrukcji, które umożliwiają dostęp do każdego elementu tablicy za pomocą numeru indeksu.The example uses a For statement to access each element of the array by its index number.

students Tablica w poprzednim przykładzie to Jednowymiarowa tablica, ponieważ używa jednego indeksu.The students array in the preceding example is a one-dimensional array because it uses one index. Nosi nazwę tablicy, która używa więcej niż jednego indeksu lub indeksu dolnego wielowymiarowe.An array that uses more than one index or subscript is called multidimensional. Aby uzyskać więcej informacji, zobacz pozostałej części tego artykułu i wymiary tablicy w języku Visual Basic.For more information, see the rest of this article and Array Dimensions in Visual Basic.

Tworzenie tablicyCreating an array

Można zdefiniować rozmiar tablicy na kilka sposobów:You can define the size of an array in several ways:

  • Można określić rozmiar, gdy tablica jest zadeklarowana:You can specify the size when the array is declared:

    ' Declare an array with 10 elements.
    Dim cargoWeights(9) As Double               
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(23, 1) As Integer
    ' Declare a jagged array with 31 elements.
    Dim januaryInquiries(30)() As String
    
  • Możesz użyć New klauzuli, aby dostarczyć rozmiaru tablicy podczas jej tworzenia:You can use a New clause to supply the size of an array when it’s created:

    ' Declare an array with 10 elements.
    Dim cargoWeights() As Double = New Double(9) {} 
    ' Declare a 24 x 2 array.
    Dim hourlyTemperatures(,) As Integer = New Integer(23, 1) {}
    ' Declare a jagged array with 31 elements. 
    Dim januaryInquiries()() As String = New String(30)() {}
    

W przypadku istniejącej tablicy można ponownie zdefiniować jej rozmiar za pomocą ReDim instrukcji.If you have an existing array, you can redefine its size by using the ReDim statement. Można określić, że ReDim instrukcji przechowywać wartości, które znajdują się w tablicy, lub można określić, że utworzona pusta tablica.You can specify that the ReDim statement keep the values that are in the array, or you can specify that it create an empty array. W poniższym przykładzie pokazano różne sposoby zastosowania ReDim instrukcję, aby zmienić rozmiar istniejącej tablicy.The following example shows different uses of the ReDim statement to modify the size of an existing array.

' Assign a new array size and retain the current values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)

Aby uzyskać więcej informacji, zobacz instrukcji ReDim.For more information, see the ReDim Statement.

Przechowywanie wartości w tablicyStoring values in an array

Dostęp do każdej lokalizacji tablicy przy użyciu indeksu typu Integer.You can access each location in an array by using an index of type Integer. Można przechowywać i pobierać wartości w tablicy, odwołując się do każdej lokalizacji tablicy przy użyciu jej indeksu w nawiasach.You can store and retrieve values in an array by referencing each array location by using its index enclosed in parentheses. Indeksy dla wielowymiarowych tablic są oddzielone przecinkami (,).Indexes for multidimensional arrays are separated by commas (,). Potrzebujesz jednego indeksu dla każdego wymiaru tablicy.You need one index for each array dimension.

Poniższy przykład ukazuje niektóre instrukcje, które przechowywać i pobierać wartości w tablicach.The following example shows some statements that store and retrieve values in arrays.


Module Example
   Public Sub Main()
      ' Create a 10-element integer array.
      Dim numbers(9) As Integer
      Dim value As Integer = 2
        
      ' Write values to it.
      For ctr As Integer = 0 To 9
         numbers(ctr) = value
         value *= 2
      Next
        
      ' Read and sum the array values.  
      Dim sum As Integer
      For ctr As Integer = 0 To 9
         sum += numbers(ctr)
      Next
      Console.WriteLine($"The sum of the values is {sum:N0}")
    End Sub
End Module
' The example displays the following output:
'     The sum of the values is 2,046

Wypełnianie tablicy przy użyciu literałów tablicyPopulating an array with array literals

Za pomocą literału tablicowego, możesz wypełnić tablicy o liczbie początkowy zestaw wartości w tym samym czasie, które możesz utworzyć.By using an array literal, you can populate an array with an initial set of values at the same time that you create it. Literał tablicowy składa się z listy wartości rozdzielanych przecinkami, które są ujęte w nawiasy klamrowe ({}).An array literal consists of a list of comma-separated values that are enclosed in braces ({}).

Tworząc tablicę przy użyciu literału tablicowego, możesz podać typ tablicy lub użyć wnioskowania typu, aby określić typ tablicy.When you create an array by using an array literal, you can either supply the array type or use type inference to determine the array type. Poniższy kod przedstawia obie opcje.The following example shows both options.

' Array literals with explicit type definition.
Dim numbers = New Integer() {1, 2, 4, 8}
' Array literals with type inference.
Dim doubles = {1.5, 2, 9.9, 18}
' Array literals with explicit type definition.
Dim articles() As String = { "the", "a", "an" }

' Array literals with explicit widening type definition.
Dim values() As Double = { 1, 2, 3, 4, 5 }

Gdy używasz wnioskowania, typ tablicy zależy od Typ dominujący na liście wartości literału.When you use type inference, the type of the array is determined by the dominant type in the list of literal values. Typ dominujący jest typem, do którego można rozszerzyć wszystkie inne typy w tablicy.The dominant type is the type to which all other types in the array can widen. Jeśli nie można ustalić tego typu unikatowego, Typ dominujący to unikatowy typ, do którego można zawęzić wszystkie inny typy w tablicy.If this unique type can’t be determined, the dominant type is the unique type to which all other types in the array can narrow. Jeśli żadna z tych typów unikatowych nie można ustalić, typem dominującym jest Object.If neither of these unique types can be determined, the dominant type is Object. Na przykład, jeśli lista wartości, które jest dostarczane do literału tablicowego zawiera wartości typu Integer, Long, i Double, tablica wynikowa jest typu Double.For example, if the list of values that’s supplied to the array literal contains values of type Integer, Long, and Double, the resulting array is of type Double. Ponieważ Integer i Long rozszerzone tylko do Double, Double jest typem dominującym.Because Integer and Long widen only to Double, Double is the dominant type. Aby uzyskać więcej informacji, zobacz rozszerzanie i zwężanie konwersji.For more information, see Widening and Narrowing Conversions.

Uwaga

Wnioskowanie o typie można użyć tylko dla tablic, które są zdefiniowane jako zmiennych lokalnych w przypadku składowej typu.You can use type inference only for arrays that are defined as local variables in a type member. Jeśli definicja jawnego typu jest nieobecne, tablice zdefiniowane przy użyciu literałów tablicy na poziomie klasy mają wartości typu Object[].If an explicit type definition is absent, arrays defined with array literals at the class level are of type Object[]. Aby uzyskać więcej informacji, zobacz wnioskowanie o typie lokalnym.For more information, see Local type inference.

Należy zauważyć, że w poprzednim przykładzie zdefiniowano values jako tablicę typu Double , mimo że literały tablicowe są typu Integer.Note that the previous example defines values as an array of type Double even though all the array literals are of type Integer. Można utworzyć tej tablicy, ponieważ wartości w literale tablicy można mogą zostać poszerzone do Double wartości.You can create this array because the values in the array literal can widen to Double values.

Można również utworzyć i wypełnić tablicę wielowymiarową przy użyciu zagnieżdżone literały tablicowe.You can also create and populate a multidimensional array by using nested array literals. Zagnieżdżone literały tablicowe muszą mieć liczbę wymiarów, który jest zgodny z tablicą wynikową.Nested array literals must have a number of dimensions that’s consistent with the resulting array. Poniższy przykład tworzy tablicę dwuwymiarową liczb całkowitych przy użyciu zagnieżdżonych literałów tablicy.The following example creates a two-dimensional array of integers by using nested array literals.

' Create and populate a 2 x 2 array.
Dim grid1 = {{1, 2}, {3, 4}}
' Create and populate a 2 x 2 array with 3 elements.
Dim grid2(,) = {{1, 2}, {3, 4}, {5, 6}}

Przy użyciu zagnieżdżonych literałów tablicy, aby utworzyć i wypełnić tablicę, błąd występuje, jeśli liczba elementów w zagnieżdżonych literałach tablicowych nie są zgodne.When using nested array literals to create and populate an array, an error occurs if the number of elements in the nested array literals don't match. Jeśli jawnie deklarować zmienną tablicy mają różną liczbę wymiarów niż literały tablicowe również wystąpi błąd.An error also occurs if you explicitly declare the array variable to have a different number of dimensions than the array literals.

Podobnie jak w przypadku tablic jednowymiarowych, tworząc tablicę wielowymiarową przy użyciu zagnieżdżonych literałów tablicy może polegać na wnioskowanie o typie.Just as you can for one-dimensional arrays, you can rely on type inference when creating a multidimensional array with nested array literals. Wnioskowany typ to typ dominujący dla wszystkich wartości w literałach tablicowych dla wszystkich poziomów zagnieżdżenia.The inferred type is the dominant type for all the values in all the array literals for all nesting level. Poniższy przykład tworzy tablicę dwuwymiarową typu Double[,] z wartości typu Integer i Double.The following example creates a two-dimensional array of type Double[,] from values that are of type Integer and Double.

Dim arr = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}

Aby uzyskać więcej przykładów, zobacz jak: Inicjowanie zmiennej tablicy w języku Visual Basic.For additional examples, see How to: Initialize an Array Variable in Visual Basic.

Iterowanie przez tablicęIterating through an array

Podczas iteracji przez tablicę dostęp każdy element w tablicy, od najniższego indeksu do najwyższego lub od najwyższego do najniższego.When you iterate through an array, you access each element in the array from the lowest index to the highest or from the highest to the lowest. Zwykle, użyj jednej dla... Następna instrukcja lub For Each... Następna instrukcja do iterowania po elementach tablicy.Typically, use either the For...Next Statement or the For Each...Next Statement to iterate through the elements of an array. Jeśli nie znasz górne granice tablicy, możesz wywołać Array.GetUpperBound metodę, aby uzyskać najwyższą wartość indeksu.When you don't know the upper bounds of the array, you can call the Array.GetUpperBound method to get the highest value of the index. Mimo że najniższa wartość indeksu jest prawie zawsze 0, możesz wywołać Array.GetLowerBound metodę, aby uzyskać najniższa wartość indeksu.Although lowest index value is almost always 0, you can call the Array.GetLowerBound method to get the lowest value of the index.

Poniższy przykład wykonuje iterację przez tablicę jednowymiarową za pomocą For...Next instrukcji.The following example iterates through a one-dimensional array by using the For...Next statement.


Module IterateArray
   Public Sub Main()
      Dim numbers = {10, 20, 30}

      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine(numbers(index))
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30

Poniższy przykład wykonuje iterację przez tablicę wielowymiarową przy użyciu For...Next instrukcji.The following example iterates through a multidimensional array by using a For...Next statement. GetUpperBound Metoda ma parametr, który określa wymiar.The GetUpperBound method has a parameter that specifies the dimension. GetUpperBound(0) Zwraca najwyższy indeks pierwszego wymiaru i GetUpperBound(1) zwraca najwyższy indeks drugiego wymiaru.GetUpperBound(0) returns the highest index of the first dimension, and GetUpperBound(1) returns the highest index of the second dimension.


Module IterateArray
   Public Sub Main()
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
' Output 
'  1 2 
'  3 4 
'  5 6

W poniższym przykładzie użyto For Each... Następna instrukcjado iteracji przez tablicę jednowymiarową i dwuwymiarową tablicę.The following example uses a For Each...Next Statementto iterate through a one-dimensional array and a two-dimensional array.


Module IterateWithForEach
   Public Sub Main()
      ' Declare and iterate through a one-dimensional array.
      Dim numbers1 = {10, 20, 30}
      
      For Each number In numbers1
         Console.WriteLine(number)
      Next
      Console.WriteLine()
      
      Dim numbers = {{1, 2}, {3, 4}, {5, 6}}

      For Each number In numbers
         Console.WriteLine(number)
      Next
   End Sub
End Module
' The example displays the following output:
'  10
'  20
'  30
'
'  1
'  2
'  3
'  4
'  5
'  6

Rozmiar tablicyArray size

Rozmiar tablicy jest produktem długości wszystkich jej wymiarów.The size of an array is the product of the lengths of all its dimensions. Reprezentuje całkowitą liczbę elementów aktualnie znajdujących się w tablicy.It represents the total number of elements currently contained in the array. Na przykład poniższy przykład deklaruje 2-wymiarowej tablicy z czterema elementami w każdym wymiarze.For example, the following example declares a 2-dimensional array with four elements in each dimension. Dane wyjściowe z przykładu pokazują, rozmiar tablicy to 16 (lub (3 + 1) * (3 + 1).As the output from the example shows, the array's size is 16 (or (3 + 1) * (3 + 1).


Module Example
   Public Sub Main()
      Dim arr(3, 3) As Integer
      Console.WriteLine(arr.Length)     
   End Sub
End Module
' The example displays the following output:
'     16

Uwaga

Tablice nieregularne nie obejmuje tej dyskusji rozmiar tablicy.This discussion of array size does not apply to jagged arrays. Aby uzyskać informacje na temat Tablice nieregularne i określenie rozmiaru tablicy nieregularnej, zobacz nierówne tablic sekcji.For information on jagged arrays and determining the size of a jagged array, see the Jagged arrays section.

Możesz znaleźć rozmiar tablicy za pomocą Array.Length właściwości.You can find the size of an array by using the Array.Length property. Możesz znaleźć długość każdego wymiaru tablicy wielowymiarowej za pomocą Array.GetLength metody.You can find the length of each dimension of a multidimensional array by using the Array.GetLength method.

Możesz zmienić rozmiar zmiennej tablicy, przypisując do niej nowy obiekt tablicy lub za pomocą ReDim instrukcji instrukcji.You can resize an array variable by assigning a new array object to it or by using the ReDim Statement statement. W poniższym przykładzie użyto ReDim instrukcję, aby zmienić 100-elementowej tablicy 51-elementowej tablicy.The following example uses the ReDim statement to change a 100-element array to a 51-element array.


Module Example
   Public Sub Main()
      Dim arr(99) As Integer
      Console.WriteLine(arr.Length)
      
      Redim arr(50)
      Console.WriteLine(arr.Length)
   End Sub
End Module
' The example displays the following output:
'     100
'     51

 

Istnieje kilka kwestii, które należy pamiętać podczas zajmowania się rozmiarem tablicy.There are several things to keep in mind when dealing with the size of an array.

Długość wymiaruDimension Length Indeks każdego wymiaru jest oparty na 0, co oznacza, że waha się od 0 do jego górnej granicy.The index of each dimension is 0-based, which means it ranges from 0 to its upper bound. W związku z tym długość danego wymiaru jest większa o jeden od deklarowanej górnej granicy tego wymiaru.Therefore, the length of a given dimension is one greater than the declared upper bound of that dimension.
Limity długościLength Limits Długość każdego wymiaru tablicy jest ograniczona do maksymalnej wartości Integer typ danych, który jest Int32.MaxValue lub (2 ^ 31) - 1.The length of every dimension of an array is limited to the maximum value of the Integer data type, which is Int32.MaxValue or (2 ^ 31) - 1. Jednakże całkowity rozmiar tablicy również jest ograniczony przez ilość pamięci dostępnej w systemie.However, the total size of an array is also limited by the memory available on your system. Jeśli użytkownik podejmie próbę zainicjowania tablicy przekraczającej ilość dostępnej pamięci, środowisko wykonawcze zgłasza OutOfMemoryException.If you attempt to initialize an array that exceeds the amount of available memory, the runtime throws an OutOfMemoryException.
Rozmiar i rozmiar elementuSize and Element Size Rozmiar tablicy nie zależy od typu danych jej elementów.An array's size is independent of the data type of its elements. Rozmiar zawsze odzwierciedla całkowitą liczbę elementów, nie liczbę bajtów, które zajmują w pamięci.The size always represents the total number of elements, not the number of bytes that they consume in memory.
Użycie pamięciMemory Consumption Nie jest bezpieczne robić założenia dotyczące, jak tablica jest przechowywana w pamięci.It is not safe to make any assumptions regarding how an array is stored in memory. Magazyn różni się na platformach o różnych szerokościach danych, aby sama tablica może zużywać więcej pamięci w systemie 64-bitowym niż w przypadku 32-bitowego systemu.Storage varies on platforms of different data widths, so the same array can consume more memory on a 64-bit system than on a 32-bit system. W zależności od konfiguracji systemu podczas inicjowania tablicy, środowisko uruchomieniowe języka wspólnego (CLR) można przypisać pamięci masowej do spakowania elementów tak blisko siebie jak to możliwe lub dostosować je wszystkie naturalnych ograniczeń sprzętowych.Depending on system configuration when you initialize an array, the common language runtime (CLR) can assign storage either to pack elements as close together as possible, or to align them all on natural hardware boundaries. Również tablica wymaga magazynowania obciążenie dla informacji o kontroli i zwiększa to obciążenie z każdym dodanym wymiarem.Also, an array requires a storage overhead for its control information, and this overhead increases with each added dimension.

Typ tablicyThe array type

Każda tablica ma typ danych, która różni się od typu danych jej elementów.Every array has a data type, which differs from the data type of its elements. Nie ma żadnych single — typ danych dla wszystkich tablic.There is no single data type for all arrays. Zamiast tego typ danych tablicy zależy od liczby wymiarów, lub ranga, tablicy i typ danych elementów w tablicy.Instead, the data type of an array is determined by the number of dimensions, or rank, of the array, and the data type of the elements in the array. Dwie tablice zmiennych są te same dane typu, tylko gdy mają tę samą rangę, a ich elementy mają ten sam typ danych.Two array variables are of the same data type only when they have the same rank and their elements have the same data type. Długości wymiarów tablicy nie wpływają na typ danych tablicy.The lengths of the dimensions of an array do not influence the array data type.

Każda tablica dziedziczy z System.Array klasy, a użytkownik może zadeklarować zmienną typu Array, ale nie można utworzyć tablicy typu Array.Every array inherits from the System.Array class, and you can declare a variable to be of type Array, but you cannot create an array of type Array. Na przykład mimo że poniższy kod deklaruje arr zmienną typu Array i wywołuje Array.CreateInstance metodę, aby utworzyć wystąpienie tablicy typu tablicy okaże się, że obiekt [].For example, although the following code declares the arr variable to be of type Array and calls the Array.CreateInstance method to instantiate the array, the array's type proves to be Object[].


Module Example
   Public Sub Main()
      Dim arr As Array = Array.CreateInstance(GetType(Object), 19)
      Console.WriteLine(arr.Length)
      Console.WriteLine(arr.GetType().Name)
   End Sub
End Module
' The example displays the following output:
'     19
'     Object[]

Ponadto instrukcji ReDim nie może działać na zmiennej zadeklarowanej jako typ Array.Also, the ReDim Statement cannot operate on a variable declared as type Array. Z tych powodów i dla zabezpieczeń typów zaleca się deklarować każdą tablicę jako określonego typu.For these reasons, and for type safety, it is advisable to declare every array as a specific type.

Można sprawdzić typ danych tablicy lub jej elementów na kilka sposobów.You can find out the data type of either an array or its elements in several ways.

  • Możesz wywołać GetType metody w zmiennej, aby pobrać Type obiekt, który reprezentuje typu run-time w zmiennej.You can call the GetType method on the variable to get a Type object that represents the run-time type of the variable. Type Obiektu zawiera wyczerpujące informacje we właściwościach i metodach.The Type object holds extensive information in its properties and methods.
  • Możesz przekazać zmienną do TypeName funkcję w celu uzyskania String nazwę typu run-time.You can pass the variable to the TypeName function to get a String with the name of run-time type.

Poniższy przykład wywołuje zarówno GetType metody i TypeName funkcję, aby określić typ tablicy.The following example calls the both the GetType method and the TypeName function to determine the type of an array. Typ tablicy to Byte(,).The array type is Byte(,). Należy pamiętać, że Type.BaseType właściwość wskazuje, że typ podstawowy tej tablicy bajtowej jest Array klasy.Note that the Type.BaseType property also indicates that the base type of the byte array is the Array class.


Module Example
   Public Sub Main()
      Dim bytes(9,9) As Byte
      Console.WriteLine($"Type of {nameof(bytes)} array: {bytes.GetType().Name}")
      Console.WriteLine($"Base class of {nameof(bytes)}: {bytes.GetType().BaseType.Name}")
      Console.WriteLine()
      Console.WriteLine($"Type of {nameof(bytes)} array: {TypeName(bytes)}")
   End Sub
End Module
' The example displays the following output:
' Type of bytes array: Byte[,]
' Base class of bytes: Array
' 
' Type of bytes array: Byte(,)


Tablice jako wartości zwracane i parametryArrays as return values and parameters

Aby zwrócić tablicę z Function procedury, określ typ danych tablicy i liczbę wymiarów jako typ zwracany Function — instrukcja.To return an array from a Function procedure, specify the array data type and the number of dimensions as the return type of the Function Statement. Wewnątrz funkcji Zadeklaruj zmienną lokalnej tablicy przy użyciu tego samego typu danych i liczbie wymiarów.Within the function, declare a local array variable with same data type and number of dimensions. W instrukcji Return, obejmują zmienną lokalnej tablicy bez nawiasów.In the Return Statement, include the local array variable without parentheses.

Aby określić tablicę jako parametr do Sub lub Function procedury, zdefiniuj parametr jako tablicę przy użyciu określonego typu danych i liczbie wymiarów.To specify an array as a parameter to a Sub or Function procedure, define the parameter as an array with a specified data type and number of dimensions. W wywołaniu procedury należy przekazać zmienną tablicową o takim samym typie danych i liczbie wymiarów.In the call to the procedure, pass an array variable with the same data type and number of dimensions.

W poniższym przykładzie GetNumbers funkcja zwraca Integer(), Jednowymiarowa tablica typu Integer.In the following example, the GetNumbers function returns an Integer(), a one-dimensional array of type Integer. ShowNumbers Akceptuje procedury Integer() argumentu.The ShowNumbers procedure accepts an Integer() argument.


Module ReturnValuesAndParams
   Public Sub Main()
      Dim numbers As Integer() = GetNumbers()
      ShowNumbers(numbers)
   End Sub

   Private Function GetNumbers() As Integer()
      Dim numbers As Integer() = {10, 20, 30}
      Return numbers
   End Function

   Private Sub ShowNumbers(numbers As Integer())
      For index = 0 To numbers.GetUpperBound(0)
         Console.WriteLine($"{numbers(index)} ")
      Next
   End Sub
End Module
' The example displays the following output:
'   10
'   20
'   30
    

W poniższym przykładzie GetNumbersMultiDim funkcja zwraca Integer(,), tablicę dwuwymiarową typu Integer.In the following example, the GetNumbersMultiDim function returns an Integer(,), a two-dimensional array of type Integer. ShowNumbersMultiDim Akceptuje procedury Integer(,) argumentu.The ShowNumbersMultiDim procedure accepts an Integer(,) argument.


Module Example
   Public Sub Main()
      Dim numbers As Integer(,) = GetNumbersMultidim()
      ShowNumbersMultidim(numbers)
   End Sub

   Private Function GetNumbersMultidim() As Integer(,)
      Dim numbers As Integer(,) = {{1, 2}, {3, 4}, {5, 6}}
      Return numbers
   End Function

   Private Sub ShowNumbersMultidim(numbers As Integer(,))
      For index0 = 0 To numbers.GetUpperBound(0)
         For index1 = 0 To numbers.GetUpperBound(1)
            Console.Write($"{numbers(index0, index1)} ")
         Next
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'     1 2
'     3 4
'     5 6

Tablice nieregularneJagged arrays

Czasami struktury danych w aplikacji są dwuwymiarowe, ale nie prostokątny.Sometimes the data structure in your application is two-dimensional but not rectangular. Może na przykład, skorzystaj z tablicy, do przechowywania danych dotyczących temperatura każdego dnia miesiąca.For example, you might use an array to store data about the high temperature of each day of the month. Pierwszego wymiaru tablicy reprezentuje miesiąca, ale drugiego wymiaru reprezentuje liczbę dni, a liczba dni w miesiącu nie jest jednolite.The first dimension of the array represents the month, but the second dimension represents the number of days, and the number of days in a month is not uniform. A tablicy nieregularnej, który jest również nazywany tablicy tablic, zaprojektowano pod kątem takich scenariuszy.A jagged array, which is also called an array of arrays, is designed for such scenarios. Nieregularna tablica jest tablicą, której elementy są również tablic.A jagged array is an array whose elements are also arrays. Tablica nieregularna i każdy element w tablicy nieregularnej może mieć jeden lub więcej wymiarów.A jagged array and each element in a jagged array can have one or more dimensions.

W poniższym przykładzie użyto tablicę miesięcy, której każdy element jest tablicą dni.The following example uses an array of months, each element of which is an array of days. W przykładzie użyto tablicy nieregularnej, ponieważ różne miesiące mają różną liczbę dni.The example uses a jagged array because different months have different numbers of days. W przykładzie pokazano sposób tworzenia tablicy nieregularnej, przypisać wartości do niego i pobrać i wyświetlić jego wartości.The example shows how to create a jagged array, assign values to it, and retrieve and display its values.

Imports System.Globalization

Module JaggedArray
   Public Sub Main()
      ' Declare the jagged array of 12 elements. Each element is an array of Double.
      Dim sales(11)() As Double
      ' Set each element of the sales array to a Double array of the appropriate size.
      For month As Integer = 0 To 11
         ' The number of days in the month determines the appropriate size.
         Dim daysInMonth As Integer =
            DateTime.DaysInMonth(Year(Now), month + 1)
         sales(month) = New Double(daysInMonth - 1) {}
      Next 

      ' Store values in each element.
      For month As Integer = 0 To 11
         For dayOfMonth = 0 To sales(month).GetUpperBound(0)
            sales(month)(dayOfMonth) = (month * 100) + dayOfMonth
         Next
      Next

      ' Retrieve and display the array values.
      Dim monthNames = DateTimeFormatInfo.CurrentInfo.AbbreviatedMonthNames
      ' Display the month names.
      Console.Write("    ")
      For ctr = 0 To sales.GetUpperBound(0)
         Console.Write($" {monthNames(ctr)}   ")
      Next   
      Console.WriteLine()
      ' Display data for each day in each month.
      For dayInMonth = 0 To 30
         Console.Write($"{dayInMonth + 1,2}.  ")
         For monthNumber = 0 To sales.GetUpperBound(0)
            If dayInMonth > sales(monthNumber).GetUpperBound(0) Then 
               Console.Write("       ")
            Else
               Console.Write($"{sales(monthNumber)(dayInMonth),-5}  ")
            End If
         Next   
         Console.WriteLine()
      Next
   End Sub
End Module
' The example displays the following output:
'      Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
'  1.  0      100    200    300    400    500    600    700    800    900    1000   1100
'  2.  1      101    201    301    401    501    601    701    801    901    1001   1101
'  3.  2      102    202    302    402    502    602    702    802    902    1002   1102
'  4.  3      103    203    303    403    503    603    703    803    903    1003   1103
'  5.  4      104    204    304    404    504    604    704    804    904    1004   1104
'  6.  5      105    205    305    405    505    605    705    805    905    1005   1105
'  7.  6      106    206    306    406    506    606    706    806    906    1006   1106
'  8.  7      107    207    307    407    507    607    707    807    907    1007   1107
'  9.  8      108    208    308    408    508    608    708    808    908    1008   1108
' 10.  9      109    209    309    409    509    609    709    809    909    1009   1109
' 11.  10     110    210    310    410    510    610    710    810    910    1010   1110
' 12.  11     111    211    311    411    511    611    711    811    911    1011   1111
' 13.  12     112    212    312    412    512    612    712    812    912    1012   1112
' 14.  13     113    213    313    413    513    613    713    813    913    1013   1113
' 15.  14     114    214    314    414    514    614    714    814    914    1014   1114
' 16.  15     115    215    315    415    515    615    715    815    915    1015   1115
' 17.  16     116    216    316    416    516    616    716    816    916    1016   1116
' 18.  17     117    217    317    417    517    617    717    817    917    1017   1117
' 19.  18     118    218    318    418    518    618    718    818    918    1018   1118
' 20.  19     119    219    319    419    519    619    719    819    919    1019   1119
' 21.  20     120    220    320    420    520    620    720    820    920    1020   1120
' 22.  21     121    221    321    421    521    621    721    821    921    1021   1121
' 23.  22     122    222    322    422    522    622    722    822    922    1022   1122
' 24.  23     123    223    323    423    523    623    723    823    923    1023   1123
' 25.  24     124    224    324    424    524    624    724    824    924    1024   1124
' 26.  25     125    225    325    425    525    625    725    825    925    1025   1125
' 27.  26     126    226    326    426    526    626    726    826    926    1026   1126
' 28.  27     127    227    327    427    527    627    727    827    927    1027   1127
' 29.  28            228    328    428    528    628    728    828    928    1028   1128
' 30.  29            229    329    429    529    629    729    829    929    1029   1129
' 31.  30            230           430           630    730           930           1130

Poprzedni przykład przypisuje wartości do tablicy nieregularnej, na podstawie element po elemencie przy użyciu For...Next pętli.The previous example assigns values to the jagged array on an element-by-element basis by using a For...Next loop. Można także przypisać wartości do elementów tablicy nieregularnej, przy użyciu zagnieżdżonych literałów tablicy.You can also assign values to the elements of a jagged array by using nested array literals. Jednak próbę użycia zagnieżdżonych literałów tablicy (na przykład Dim valuesjagged = {{1, 2}, {2, 3, 4}}) generuje błąd kompilatora BC30568.However, the attempt to use nested array literals (for example, Dim valuesjagged = {{1, 2}, {2, 3, 4}}) generates compiler error BC30568. Aby poprawić ten błąd, należy umieścić wewnętrzne literały tablicowe w nawiasach.To correct the error, enclose the inner array literals in parentheses. Nawiasy wymuszają wyrażeniu literalnym tablicy, mogło zostać ocenione, a wyniki są używane z zewnętrznym literałem tablicy, jak pokazano w poniższym przykładzie.The parentheses force the array literal expression to be evaluated, and the resulting values are used with the outer array literal, as the following example shows.


Module Example
   Public Sub Main()
      Dim values1d = { 1, 2, 3 }
      Dim values2d = {{1, 2}, {2, 3}, {3, 4}}
      Dim valuesjagged = {({1, 2}), ({2, 3, 4})}
   End Sub
End Module

Nieregularna Tablica to Jednowymiarowa tablica, której elementy zawierają tablic.A jagged array is a one-dimensional array whose elements contain arrays. W związku z tym Array.Length właściwości i Array.GetLength(0) metoda zwraca liczbę elementów w tablicy jednowymiarowej, i Array.GetLength(1) zgłasza IndexOutOfRangeException ponieważ nie jest wielowymiarowej tablicy nieregularnej.Therefore, the Array.Length property and the Array.GetLength(0) method return the number of elements in the one-dimensional array, and Array.GetLength(1) throws an IndexOutOfRangeException because a jagged array is not multidimensional. Należy określić liczbę elementów w każdy element członkowski podtablicy poprzez pobranie wartości każdy element członkowski podtablicy Array.Length właściwości.You determine the number of elements in each subarray by retrieving the value of each subarray's Array.Length property. Poniższy przykład ilustruje sposób określić liczbę elementów w tablicy nieregularnej.The following example illustrates how to determine the number of elements in a jagged array.


Module Example
   Public Sub Main()
      Dim jagged = { ({1, 2}), ({2, 3, 4}), ({5, 6}), ({7, 8, 9, 10}) }
      Console.WriteLine($"The value of jagged.Length: {jagged.Length}.")
      Dim total = jagged.Length
      For ctr As Integer = 0 To jagged.GetUpperBound(0)
         Console.WriteLine($"Element {ctr + 1} has {jagged(ctr).Length} elements.") 
         total += jagged(ctr).Length 
      Next
      Console.WriteLine($"The total number of elements in the jagged array: {total}")
   End Sub
End Module
' The example displays the following output:
'     The value of jagged.Length: 4.
'     Element 1 has 2 elements.
'     Element 2 has 3 elements.
'     Element 3 has 2 elements.
'     Element 4 has 4 elements.
'     The total number of elements in the jagged array: 15

Tablice o zerowej długościZero-length arrays

Visual Basic rozróżnia między tablicą niezainicjowanej (tablicę, której wartość jest Nothing) i tablicę o zerowej długości lub pusta tablica (tablicę, która nie ma żadnych elementów.) Tablica niezainicjowanej jest taki, który nie został wymiary lub miał wszystkie wartości przypisane do niego.Visual Basic differentiates between a uninitialized array (an array whose value is Nothing) and a zero-length array or empty array (an array that has no elements.) An uninitialized array is one that has not been dimensioned or had any values assigned to it. Na przykład:For example:

Dim arr() As String

Tablicę o zerowej długości jest zadeklarowana za pomocą wymiaru-1.A zero-length array is declared with a dimension of -1. Na przykład:For example:

Dim arrZ(-1) As String

Może być konieczne utworzyć tablicę o zerowej długości w następujących okolicznościach:You might need to create a zero-length array under the following circumstances:

  • Bez ryzyka NullReferenceException wyjątek, kod musi mieć dostęp członkowie Array klasy, takie jak Length lub Rank, lub wywołać funkcję języka Visual Basic, taką jak UBound.Without risking a NullReferenceException exception, your code must access members of the Array class, such as Length or Rank, or call a Visual Basic function such as UBound.

  • Chcesz uprościć kod, nie ma pod kątem Nothing w szczególnych przypadkach.You want to keep your code simple by not having to check for Nothing as a special case.

  • Twój kod współdziała z interfejs programowania aplikacji (API), który wymaga przekazania tablicę o zerowej długości do jednej lub kilku procedur albo zwraca tablicę o zerowej długości z jedną lub kilkoma procedurami.Your code interacts with an application programming interface (API) that either requires you to pass a zero-length array to one or more procedures or returns a zero-length array from one or more procedures.

Podział tablicySplitting an array

W niektórych przypadkach może być konieczne podzielić pojedynczą tablicę wiele tablic.In some cases, you may need to split a single array into multiple arrays. Obejmuje to identyfikowanie punkt lub punkty, w których tablica jest rozliczany, a następnie plucie tablicy do co najmniej dwóch oddzielnych tablic.This involves identifying the point or points at which the array is to be split, and then spitting the array into two or more separate arrays.

Uwaga

W tej sekcji omówiono w nim dzielenie pojedynczego ciągu na tablicę ciągów, w oparciu o ogranicznika.This section does not discuss splitting a single string into a string array based on some delimiter. Aby uzyskać informacji na temat dzielenia ciągu, zobacz String.Split metody.For information on splitting a string, see the String.Split method.

Najbardziej typowe kryteria podział tablicy są:The most common criteria for splitting an array are:

  • Liczba elementów w tablicy.The number of elements in the array. Na przykład można podzielić tablicę więcej niż określoną liczbę elementów w przybliżeniu równe części.For example, you might want to split an array of more than a specified number of elements into a number of approximately equal parts. W tym celu można użyć wartości zwrócone przez Array.Length lub Array.GetLength metody.For this purpose, you can use the value returned by either the Array.Length or Array.GetLength method.

  • Wartość elementu, który służy jako ogranicznika, która wskazuje, gdzie można podzielić tablicy.The value of an element, which serves as a delimiter that indicates where the array should be split. Można wyszukać określoną wartość, przez wywołanie metody Array.FindIndex i Array.FindLastIndex metody.You can search for a specific value by calling the Array.FindIndex and Array.FindLastIndex methods.

Po określeniu indeksu lub indeksów, w których można podzielić tablicy, będzie można utworzyć poszczególnych tablic, wywołując Array.Copy metody.Once you've determined the index or indexes at which the array should be split, you can then create the individual arrays by calling the Array.Copy method.

Poniższy przykład dzieli tablicę na dwóch tablicach w przybliżeniu taki sam rozmiar.The following example splits an array into two arrays of approximately equal size. (Jeśli łączna liczba elementów tablicy jest nieparzysta, pierwsza tablica ma jeden element więcej od drugiego).(If the total number of array elements is odd, the first array has one more element than the second.)


Module Example
   Public Sub Main()
      ' Create an array of 100 elements.
      Dim arr(99) As Integer
      ' Populate the array.
      Dim rnd As new Random()
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = rnd.Next()
      Next
      
      ' Determine how many elements should be in each array.
      Dim divisor = 2
      Dim remainder As Integer
      Dim boundary = Math.DivRem(arr.GetLength(0), divisor, remainder)
            
      ' Copy the array.
      Dim arr1(boundary - 1 + remainder), arr2(boundary - 1) as Integer
      Array.Copy(arr, 0, arr1, 0, boundary + remainder)
      Array.Copy(arr, boundary + remainder, arr2, 0, arr.Length - boundary) 
   End Sub
End Module

Poniższy przykład dzieli tablicę ciągów na dwóch tablicach, na podstawie obecności elementu, którego wartością jest "zzz", która służy jako ogranicznika tablicy.The following example splits a string array into two arrays based on the presence of an element whose value is "zzz", which serves as the array delimiter. Nowe tablice nie dołączaj elementu, który zawiera ogranicznik.The new arrays do not include the element that contains the delimiter.


Module Example
   Public Sub Main()
      Dim rnd As New Random()
      
      ' Create an array of 100 elements.
      Dim arr(99) As String
      ' Populate each element with an arbitrary ASCII character.
      For ctr = 0 To arr.GetUpperBound(0)
         arr(ctr) = ChrW(Rnd.Next(&h21, &h7F))
      Next
      ' Get a random number that will represent the point to insert the delimiter.
      arr(rnd.Next(0, arr.GetUpperBound(0))) = "zzz"

      ' Find the delimiter.
      Dim location = Array.FindIndex(arr, Function(x) x = "zzz")

      ' Create the arrays.
      Dim arr1(location - 1) As String
      Dim arr2(arr.GetUpperBound(0) - location - 1) As String
      
      ' Populate the two arrays.
      Array.Copy(arr, 0, arr1, 0, location)
      Array.Copy(arr, location + 1, arr2, 0, arr.GetUpperBound(0) - location)
   End Sub
End Module

Dołączenie do tablicJoining arrays

Liczba macierzy można także połączyć w jedną większe.You can also combine a number of arrays into a single larger array. Aby to zrobić, należy również użyć Array.Copy metody.To do this, you also use the Array.Copy method.

Uwaga

W tej sekcji omówiono w nim dołączenie do tablicy ciągów w jeden ciąg.This section does not discuss joining a string array into a single string. Aby uzyskać informacji na temat dołączania tablicę ciągów, zobacz String.Join metody.For information on joining a string array, see the String.Join method.

Przed skopiowaniem elementów tablic do nowej tablicy, należy się najpierw upewnić już zainicjować tablicy, aby był wystarczająco dużą do obsługi nowej tablicy.Before copying the elements of each array into the new array, you must first ensure that you have initialized the array so that it is large enough to accommodate the new array. Można to zrobić na jeden z dwóch sposobów:You can do this in one of two ways:

  • Użyj ReDim Preserve instrukcję, aby dynamicznie rozwiń tablicy przed dodaniem nowych elementów.Use the ReDim Preserve statement to dynamically expand the array before adding new elements to it. Jest to najprostszy technika, ale może powodować spadek wydajności i zużycia zbyt dużej ilości pamięci, kopiując duże tablice.This is the easiest technique, but it can result in performance degradation and excessive memory consumption when you are copying large arrays.
  • Oblicz sumę elementów potrzebnych do nowej tablicy dużych, a następnie dodaj elementy tablicy każdego źródła do niego.Calculate the total number of elements needed for the new large array, then add the elements of each source array to it.

W poniższym przykładzie użyto drugiej metody, aby dodać czterech tablic dziesięć elementów do pojedynczej macierzy.The following example uses the second approach to add four arrays with ten elements each to a single array.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())
       ' Compute the number of elements in all arrays.
       Dim elements = 0
       For Each task In tasks
          elements += task.Result.Length
       Next
       Dim newArray(elements - 1) As Integer
       Dim index = 0
       For Each task In tasks
          Dim n = task.Result.Length
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

Ponieważ w tym przypadku tablic źródła są wszystkie małe, firma Microsoft jest również dynamicznie rozwiń tablicy dodanie do niej elementy każdej nowej tablicy.Since in this case the source arrays are all small, we can also dynamically expand the array as we add the elements of each new array to it. Poniższy przykład robi to.The following example does that.

Imports System.Collections.Generic
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim tasks As New List(Of Task(Of Integer()))
      ' Generate four arrays.
      For ctr = 0 To 3
         Dim value = ctr
         tasks.Add(Task.Run(Function()
                               Dim arr(9) As Integer
                               For ndx = 0 To arr.GetUpperBound(0)
                                  arr(ndx) = value
                               Next
                               Return arr
                            End Function))   
       Next
       Task.WaitAll(tasks.ToArray())

       ' Dimension the target array and copy each element of each source array to it.
       Dim newArray() As Integer = {}
       ' Define the next position to copy to in newArray.
       Dim index = 0
       For Each task In tasks
          Dim n = Task.Result.Length
          ReDim Preserve newArray(newArray.GetUpperBound(0) + n)
          Array.Copy(task.Result, 0, newArray, index, n)
          index += n
       Next 
      Console.WriteLine($"The new array has {newArray.Length} elements.")
   End Sub
End Module
' The example displays the following output:
'     The new array has 40 elements.

Kolekcje jako alternatywa dla tablicCollections as an alternative to arrays

Tablice są najbardziej przydatne do tworzenia i pracy ze stałą liczbą jednoznacznie silnych obiektów.Arrays are most useful for creating and working with a fixed number of strongly typed objects. Kolekcje zapewniają bardziej elastyczny sposób pracy z grupami obiektów.Collections provide a more flexible way to work with groups of objects. W odróżnieniu od tablic, które wymagają jawnie zmienić rozmiar tablicy o liczbie ReDim instrukcji, kolekcje rosnąć i maleć dynamicznie, wraz z aplikacji zmienia się zapotrzebowanie.Unlike arrays, which require that you explicitly change the size of an array with the ReDim Statement, collections grow and shrink dynamically as the needs of an application change.

Kiedy używasz ReDim do redimension tablicę, Visual Basic tworzy nową tablicę i zwalnia poprzednią.When you use ReDim to redimension an array, Visual Basic creates a new array and releases the previous one. Spowoduje to przejście czasu wykonywania.This takes execution time. W związku z tym jeśli liczba elementów, który aktualnie pracuje ulega częstym zmianom, lub nie można przewidzieć maksymalną liczbę elementów, których potrzebujesz, zazwyczaj będzie uzyskać lepszą wydajność, używając kolekcji.Therefore, if the number of items you are working with changes frequently, or you cannot predict the maximum number of items you need, you'll usually obtain better performance by using a collection.

W niektórych kolekcjach można przypisać klawisz do dowolnych obiektów umieszczonych do kolekcji, tak aby pozwala na szybkie pobranie obiektu przy użyciu klucza.For some collections, you can assign a key to any object that you put into the collection so that you can quickly retrieve the object by using the key.

Jeśli kolekcja zawiera elementy tylko jednego typu danych, możesz użyć jednej z klas w System.Collections.Generic przestrzeni nazw.If your collection contains elements of only one data type, you can use one of the classes in the System.Collections.Generic namespace. Ogólna kolekcja wymusza typ bezpieczeństwa tak, aby żaden typ danych można dodać do niego.A generic collection enforces type safety so that no other data type can be added to it.

Aby uzyskać więcej informacji na temat kolekcji, zobacz kolekcje.For more information about collections, see Collections.

TerminTerm DefinicjaDefinition
Wymiary tablic w języku Visual BasicArray Dimensions in Visual Basic Wyjaśnia rangę i wymiary w tablicach.Explains rank and dimensions in arrays.
Instrukcje: Inicjowanie zmiennej tablicy w języku Visual BasicHow to: Initialize an Array Variable in Visual Basic Zawiera opis sposobu wypełniania tablic z wartościami początkowymi.Describes how to populate arrays with initial values.
Instrukcje: Sortowanie tablicy w języku Visual BasicHow to: Sort An Array in Visual Basic Pokazuje jak alfabetycznie sortować elementy tablicy.Shows how to sort the elements of an array alphabetically.
Instrukcje: Przypisywanie tablicy do innej tablicyHow to: Assign One Array to Another Array W tym artykule opisano zasady i czynności podczas przypisywania tablicy do innej zmiennej tablicy.Describes the rules and steps for assigning an array to another array variable.
Rozwiązywanie problemów związanych z tablicamiTroubleshooting Arrays W tym artykule omówiono niektóre typowe problemy, które występują podczas pracy z tablicami.Discusses some common problems that arise when working with arrays.

Zobacz takżeSee also