Matrizes no Visual Basic
Um matriz é um conjunto de valores que são logicamente relacionados uns aos outros, como, por exemplo, o número de alunos em cada nível em uma escola de gramática.
Uma matriz permite que você para se referir a esses valores relacionados com o mesmo nome e um número, chamado de usar um índice ou subscrito, para diferenciá-las. Os valores individuais são chamados de elementos da matriz. Eles são contíguos a partir do índice 0 através de maior valor de índice .
Em contraste com uma matriz, uma variável que contém um valor único é chamado um escalares variável.
Example
O exemplo a seguir declara uma variável do array para manter o número de alunos em cada nível em uma escola de gramática.
Dim students(6) As Integer
A matriz students no exemplo anterior contém elementos de 7. Os índices do intervalo de 0 a 6 elementos. Esta matriz é ter mais simples do que a declaração de variáveis diferentes de 7.
A ilustração a seguir mostra a matriz students. Para cada elemento da matriz:
O grau de representa o índice do elemento (índice 0 representa o jardim de infância).
O valor contido no elemento representa o número de alunos em que grau.
Elementos dos alunos"" matriz
O exemplo a seguir mostra como referir-se ao primeiro, segundo e último elemento da matriz students.
Dim kindergarten As Integer = students(0)
Dim firstGrade As Integer = students(1)
Dim sixthGrade As Integer = students(6)
MsgBox("Students in kindergarten = " & CStr(kindergarten))
MsgBox("Students in first grade = " & CStr(firstGrade))
MsgBox("Students in sixth grade = " & CStr(sixthGrade))
Você pode consultar a matriz como um todo, usando apenas o nome de variável de matriz sem índices.
Dimensões de matriz
A matriz students no exemplo anterior usa um índice e é considerado um-dimensional. Uma matriz que usa mais de um índice ou subscrito é chamada de multidimensionais. For more information, see Dimensões de matriz em Visual Basic.
Outro tipo de matriz é a que contém outras matrizes como elementos. Isso é conhecido como um matriz de matrizes de ou irregulares matriz. Uma matriz denteada pode ser tanto uma-dimensional ou multidimensional e pode então os seus elementos. Sometimes the data structure in your application is two-dimensional but not rectangular. For example, you might have an array of months, each element of which is an array of days. Since different months have different numbers of days, the elements do not form a rectangular two-dimensional array. In such a case, you can use a jagged array instead of a multidimensional array.
Declarar uma matriz
Declare uma variável de matriz da mesma maneira que qualquer outra variável, usando o Dim demonstrativo. Siga o nome de variável com um ou mais pares de parênteses para indicar que ele deverá conter uma matriz em vez de um escalares (uma variável que contém um único valor).
Para declarar uma matriz dimensional-uma variável, adicione um par de parênteses após o nome de variável .
Dim cargoWeights() As Double
Para declarar uma variávelde matriz multidimensional, adicione um par de parênteses após o nome de variável e colocar as vírgulas dentro dos parênteses para separar as dimensões.
Dim atmospherePressures(,,,) As Short
Para declarar uma variávelde matriz denteada, adicione vários pares de parênteses após o nome da variável quantos são os níveis de matrizes aninhadas.
Dim inquiriesByYearMonthDay()()() As Byte
Os exemplos anteriores declarar variáveis de matriz, mas não arrays lhes atribuir. Você ainda deve criar uma matriz, inicializá-la e atribuí-la à variável.
Matrizes de comprimento zero-
An array with no elements is also called a zero-length array. A variable holding a zero-length array does not have the value Nothing. Para criar uma matriz que não possui elementos, declare uma das dimensões da matriz como -1, conforme mostrado no exemplo a seguir.
Dim twoDimensionalStrings(-1, 3) As String
You might need to create a zero-length array under the following circumstances:
Your code needs to access members of the Array class, such as Length or Rank, or call a Visual Basic function such as UBound, without risking a NullReferenceException exception.
You want to keep the consuming code simpler by not having to check for Nothing as a special case.
Your code interacts with an application programming interface (API) that requires you to pass a zero-length array to one or more procedures, or that returns a zero-length array from one or more procedures.
Criação de uma matriz
Uma matriz pode ser criada de duas maneiras. Você pode fornecer o tamanho de uma matriz, quando ela é declarada ou, como uma matriz é um objeto, você criar com um operador New (Visual Basic) cláusula e os atribui à variávelde matriz. Você pode fazer isso como parte da declaraçãode matriz ou em uma subseqüente instrução de atribuição , como mostrado no exemplo a seguir.
cargoWeights = New Double() {}
atmospherePressures = New Short(,,,) {}
inquiriesByYearMonthDay = New Byte()()() {}
Após a execução das afirmações a seguir, as matrizes são comprimento 0.
Observação |
---|
O New cláusula deve especificar o nome do tipo, seguido de parênteses, seguidos por chaves ({}). The parentheses do not represent a call to an array constructor. Instead, they indicate that the object type is an array type. Você pode fornecer valores de inicialização dentro das chaves. The compiler requires the braces even if you are not supplying any values. Portanto, o New cláusula deve incluir os parênteses e as chaves, mesmo que ambos contenham sem valores. Se você excluir as chaves, o compilador pressupõe que você está chamando o construtor para o tipo especificado. |
Você pode definir o tamanho de uma matriz de várias maneiras diferentes. Você pode fornecer o tamanho quando a matriz é declarada, como mostrado no exemplo a seguir.
Dim cargoWeights(10) As Double
Dim atmospherePressures(2, 2, 4, 10) As Short
Dim inquiriesByYearMonthDay(20)()() As Byte
Você também pode fornecer o tamanho de uma matriz, quando ele é criado usando um New cláusula, conforme mostrado no exemplo a seguir.
cargoWeights = New Double(10) {}
atmospherePressures = New Short(2, 2, 4, 10) {}
inquiriesByYearMonthDay = New Byte(20)()() {}
Se você tiver uma matriz existente, você pode redefinir o seu tamanho usando o Redimdedemonstrativo. Você pode especificar que o Redimdedemonstrativo manter os valores que estão atualmente armazenados na matriz, ou você pode especificar que ele criar uma matriz de nova e vazia. O exemplo a seguir mostra os usos diferentes da Redimdedemonstrativo para modificar o tamanho de um array existente.
' Assign a new array size and retain the current element values.
ReDim Preserve cargoWeights(20)
' Assign a new array size and retain only the first five element values.
ReDim Preserve cargoWeights(4)
' Assign a new array size and discard all current element values.
ReDim cargoWeights(15)
For more information, see instrução ReDim (Visual Basic).
Preencher uma matriz com valores iniciais
Você pode criar uma matriz que contém um conjunto inicial de valores usando um literal de matriz. Um literal de matriz consiste em uma lista de valores separados por vírgula-que são colocadas entre chaves ({}).
Quando você criar uma matriz, usando um literal de matriz, você tanto pode fornecer o tipo de matriz ou o uso digite inferência para determinar o tipo de matriz. Ambas as opções são mostradas no código a seguir.
Dim numbers = New Integer() {1, 2, 4, 8}
Dim doubles = {1.5, 2, 9.9, 18}
Quando você usa o tipo de inferência, o tipo da matriz é determinado pelo dominante tipo na lista de valores que é fornecido para a literal de matriz. O tipo dominante é um tipo exclusivo que todos os outros tipos de literal de matriz podem ampliar a. Se este tipo exclusivo não pode ser determinado, o tipo dominante é o tipo exclusivo que todos os outros tipos de matriz podem restringir a pesquisa. Se nenhum desses tipos exclusivos pode ser determinado o tipo de dominante é Object. Por exemplo, se a lista de valores fornecidos para o literal de matriz contém os valores do tipo Integer, Long, e Double, a matriz resultante é do tipo Double. Ambos Integer e Long aumentarão para Double e apenas Double. Portanto, Double é o tipo dominante. For more information, see Conversões de expansão e restrição (Visual Basic). Esses inferência regras aplicar a tipos inferidos para matrizes que são variáveis locais definidas em um membro da classe . Embora você possa usar literais de matriz quando você criar classe-nível de variáveis, você não pode usar a inferência de tipo no nível de classe . Como resultado, os literais de matriz são especificados no nível de classe deduzir os valores fornecidos para a literal como tipo de matriz Object.
Você pode especificar explicitamente o tipo dos elementos em uma matriz que é criada usando um literal de matriz. Nesse caso, os valores na matriz literal devem ampliar para o tipo dos elementos da matriz. O exemplo de código a seguir cria uma matriz do tipo Double de uma lista de números inteiros.
Dim values As Double() = {1, 2, 3, 4, 5, 6}
Literais de matriz aninhada
Você pode criar uma matriz multidimensional usando literais de matriz aninhada. Literais de matriz aninhada devem ter uma dimensão e o número de dimensões, ou classificar, isto é consistente com a matriz resultante. O exemplo de código a seguir cria uma matriz dimensional de-dois de inteiros usando um literal de matriz.
Dim grid = {{1, 2}, {3, 4}}
No exemplo anterior, um erro ocorrerá se o número de elementos em literais de matriz aninhada não coincidiram. Um erro ocorrerá também se a variável de matriz fosse explicitamente declarado diferente de dois-dimensional.
Observação |
---|
Você pode evitar um erro quando você fornecer literais de matriz aninhada de diferentes dimensões, incluindo os literais de matriz interna parênteses. Os parênteses obrigam a expressão literal de matriz a ser avaliada e os valores resultantes são usados com o literal de matriz externa. This is shown in the following code. |
Dim values = {({1, 2}), ({3, 4, 5})}
Quando você criar uma matriz multidimensional usando aninhados literais de matriz, você pode usar a inferênciade tipo. Quando você usa o tipo de inferência, o tipo inferido é o tipo de dominante para todos os valores em todos os literais de matriz para um nível de aninhamento. O exemplo de código a seguir cria uma matriz dimensional de-duas do tipo Double de valores que são do tipo Integer e Double.
Dim a = {{1, 2.0}, {3, 4}, {5, 6}, {7, 8}}
For additional examples, see Como: Inicializar variáveis de matriz no Visual Basic.
Armazenar valores em uma matriz
Você pode acessar cada local em uma matriz usando um índice de tipo Integer. Você pode armazenar e recuperar valores em uma matriz, fazendo referência a cada local da matriz usando o seu índice entre parênteses. Índices para matrizes unidimensionais de vários-são separados por vírgulas (,).Você precisa de um índice para cada dimensão de matriz. The following example shows some statements that store values in arrays.
Dim i = 4
Dim j = 2
Dim numbers(10) As Integer
Dim matrix(5, 5) As Double
numbers(i + 1) = 0
matrix(3, j * 2) = j
The following example shows some statements that get values from arrays.
Dim v = 2
Dim i = 1
Dim j = 1
Dim k = 1
Dim wTotal As Double = 0.0
Dim sortedValues(5), rawValues(5), estimates(2, 2, 2) As Double
Dim lowestValue = sortedValues(0)
wTotal += (rawValues(v) ^ 2)
Dim firstGuess = estimates(i, j, k)
For each array dimension, the GetUpperBound method returns the highest value the index can have. The lowest index value is always 0.
Tamanho da matriz
O tamanho de uma matriz é o produto dos comprimentos de todas as suas dimensões. Ele representa o número total de elementos contidos atualmente no array.
O exemplo a seguir declara uma matriz dimensional de-três.
Dim prices(3, 4, 5) As Long
O tamanho total da matriz na variável prices é (3 + 1) x (4 + 1) x (5 + 1) = 120.
Você pode encontrar o tamanho de uma matriz usando o Lengthdepropriedade. Você pode encontrar o comprimento de cada dimensão de uma matriz dimensional de vários-usando o GetLength método.
Você pode redimensionar uma variável de matriz, atribuindo um novo array objeto para ele ou usando o ReDim demonstrativo.
Há várias maneiras de se ter em mente ao lidar com o tamanho de uma matriz.
Comprimento de dimensão |
O índice de cada dimensão é-baseada em 0, que significa que ele varia de 0 através de seu superior limite. Portanto, o comprimento de uma determinada dimensão é maior por 1 declarada superior limite para essa dimensão. |
Limites de comprimento |
O comprimento de cada dimensão de uma matriz está limitado ao valor máximo do Integer tipo de dados, que é (2 ^ 31) - 1. No entanto, o tamanho total de uma matriz também é limitado pela memória disponível no seu sistema. Se você tentar inicializar uma matriz que excede a quantidade de RAM disponível, o Common Language Runtime lança um OutOfMemoryException exceção. |
Tamanho e o tamanho do elemento |
Tamanho de matriz é independente do tipo de dados de seus elementos. O tamanho sempre representa o número total de elementos, não o número de bytes que eles consomem no armazenamento. |
Consumo de memória |
Não é seguro fazer suposições sobre como uma matriz é armazenada na memória. Armazenamento varia em plataformas de larguras diferentes de dados, para que o mesmo conjunto pode consumir mais memória em um sistema de bits de-64 que em um sistema de bits de-32. Dependendo da configuração do sistema ao inicializar uma matriz Common Language Runtime (CLR) pode atribuir armazenamento para compactar elementos como fechar juntos possível ou para alinhar todas elas em limites de hardware natural. Além disso, uma matriz de armazenamento requer sobrecarga para suas informações de controle, e essa sobrecarga aumenta com cada dimensão adicionada. |
Tipos de matriz e outros tipos
Data Types
Cada matriz tem um tipo de dados, mas ele difere do tipo de dados de seus elementos. There is no single data type for all arrays. Em vez disso, o tipo de dados de uma matriz é determinado pelo número de dimensões, ou classificar, da matriz e o tipo de dados dos elementos na matriz. Duas variáveis de matriz são consideradas ser do mesmo tipo de dados somente quando tiverem a mesma classificar e seus elementos têm o mesmo tipo de dados. Os comprimentos das dimensões em uma matriz não influenciam a matriz do tipo de dados.
Cada array herda de System.Array classee você pode declarar uma variável para ser do tipo Array, mas não é possível criar uma matriz do tipo Array. Além disso, o instrução ReDim (Visual Basic) não pode operar em uma variável declarada como do tipo Array. Por esses motivos e segurança de tipos, é aconselhável declarar cada array como um tipo específico, como Integer o exemplo anterior.
Você pode descobrir o tipo de dados de uma matriz ou de seus elementos de diversas maneiras.
Você pode chamar o Object.GetTypemétodo em que a variável receba um Typeoobjeto para a execução de-tipo de tempo da variável. O Type objeto contém informações abrangentes em suas propriedades e métodos.
Você pode passar a variável para o TypeNameafunção para receber um String executar o contendo o nome do tipo de tempo de-.
Você pode passar a variável para o VarTypeafunção para receber um VariantType valor que representa a classificação do tipo da variável.
O exemplo a seguir chama o TypeName função para determinar o tipo da matriz e o tipo dos elementos na matriz. O tipo de array é Integer(,) e os elementos na matriz são do tipo Integer.
Dim thisTwoDimArray(,) As Integer = New Integer(9, 9) {}
MsgBox("Type of thisTwoDimArray is " & TypeName(thisTwoDimArray))
MsgBox("Type of thisTwoDimArray(0, 0) is " & TypeName(thisTwoDimArray(0, 0)))
Coleções, como uma alternativa para Arrays
Embora as coleções são mais frequentemente usadas para trabalhar com o Tipo de dados Object, você pode usar uma coleção para trabalhar com qualquer tipo de dados. Em algumas circunstâncias, pode ser mais eficiente para armazenar itens em uma coleção do que em uma matriz.
Se você precisar alterar o tamanho de uma matriz, você deve usar o instrução ReDim (Visual Basic). Ao fazer isso, Visual Basic cria uma nova matriz e libera o array anterior para eliminação. Isso leva tempo de execução. Portanto, se o número de itens que você estiver trabalhando com as alterações com freqüência, ou você não pode prever o número máximo de itens que você precisa, você pode obter um melhor desempenho ao usar uma coleção.
Uma coleção, que não é necessário criar um novo objeto ou copiar elementos existentes, pode manipular o redimensionamento em menos tempo de execução de uma matriz, deve usar uma ReDim. Mas, se o tamanho não altera ou apenas raramente é alterado, uma matriz provavelmente será mais eficiente. Como sempre, o desempenho é altamente dependente de aplicativoindividuais. Ele é freqüentemente, poupará tempo para tentar uma matriz e uma coleção.
Specialized Collections
O .NET Framework também fornece uma variedade de classes, interfaces e estruturas para coleções gerais e especiais. O System.Collections e System.Collections.Specialized namespaces contém definições e implementações que incluem dicionários, listas, filas e pilhas. O System.Collections.Generic namespace fornece muitas dessas versões genéricas, que levam a um ou mais argumentos de tipo.
Se sua coleção conter elementos de específico apenas um tipo de dados, uma coleção de genérico tem a vantagem de impor segurança de tipos. Para obter mais informações sobre os genéricos, consulte Tipos genéricos no Visual Basic (Visual Basic).
Specialized Collections
O .NET Framework também fornece uma variedade de classes, interfaces e estruturas para coleções gerais e especiais. O System.Collections e System.Collections.Specialized namespaces contém definições e implementações que incluem dicionários, listas, filas e pilhas. O System.Collections.Generic namespace fornece muitas dessas versões genéricas, que levam a um ou mais argumentos de tipo.
Se sua coleção conter elementos de específico apenas um tipo de dados, uma coleção de genérico tem a vantagem de impor segurança de tipos. Para obter mais informações sobre os genéricos, consulte Tipos genéricos no Visual Basic (Visual Basic).
Example
O exemplo a seguir usa a .NET Framework genérica classe System.Collections.Generic.List<T> para criar uma lista de coleção de Customer objetos.
' Define the class for a customer.
Public Class Customer
Public Property Name As String
' Insert code for other members of customer structure.
End Class
' Create a module-level collection that can hold 200 elements.
Public CustomerList As New List(Of Customer)(200)
' Add a specified customer to the collection.
Private Sub AddNewCustomer(ByVal newCust As Customer)
' Insert code to perform validity check on newCust.
CustomerList.Add(newCust)
End Sub
' Display the list of customers in the Debug window.
Private Sub PrintCustomers()
For Each cust As Customer In CustomerList
Debug.WriteLine(cust)
Next cust
End Sub
A declaração da CustomerFile coleção Especifica que ela pode conter elementos somente do tipo Customer. Ele também fornece uma capacidade inicial de 200 elementos. O procedimento AddNewCustomer verifica o novo elemento de validade e a adiciona à coleção. O procedimentoPrintCustomers usa um For Eacholoop para percorrer a coleção e exibir elementos.
Related Topics
Term |
Definition |
---|---|
Explica a classificar . |
|
Descreve como preencher os arrays com valores iniciais. |
|
Descreve como inverter a ordem dos elementos de uma matriz. |
|
Mostra como classificar os elementos de uma matriz alfabeticamente. |
|
Descreve as regras e as etapas para atribuir uma matriz a outra variávelde matriz. |
|
Como: Alterar uma matriz para uma matriz diferente (Visual Basic) |
Discute as alterações que são possíveis e como realizá-los. |
Como: Passar uma matriz para um procedimento ou propriedade (Visual Basic) |
Explica como passar uma matriz como um argumento para um procedimento ou propriedade. |
Como: Retornar uma matriz de um procedimento ou propriedade (Visual Basic) |
Descreve como retornar uma matriz para o código que chama um procedimento ou propriedade. |
Aborda alguns problemas comuns que surgem ao trabalhar com matrizes. |