Uma matriz é uma coleção de dados ordenados. Os elementos da matriz podem não pertencer ao mesmo tipo de dados. Use um nome de array unificado e um subscrito para identificar exclusivamente os elementos do array. A alteração de um elemento não afetará outros elementos. Os subscritos das matrizes são limitados e divididos em limites inferiores e superiores. Os arrays podem ser declarados usando Dim, Private, Public ou Static, e seus formatos de sintaxe são os mesmos. A seguir apresentamos apenas o método de declaração de um array usando Dim.
1. Definição e declaração de array
A sintaxe de definição de um array é a seguinte:
Nome da matriz dim ([[limite inferior do subscrito para] limite superior do subscrito]) [Como tipo de dados]
Por exemplo (assumindo que o limite inferior padrão para matrizes no módulo atual seja 0)):
① Dim A (10) como inteiro
Indica que o nome da matriz é A. O limite inferior do subscrito desta matriz é o valor padrão 0 e o limite superior do subscrito é 10. Existem 11 elementos do tipo Inteiro, de A(0), A(1 ) para A(10).
② Dim B (1 a 20) como inteiro
Indica que o nome da matriz é B. O limite inferior do subscrito desta matriz é 1, o limite superior do subscrito é 20 e há 20 elementos do tipo Integer, de B(1) a B(20).
③Dim DayArray(50)
Indica que DayArray é uma matriz Variant com 51 elementos indexados (de 0 a 50).
④Dim Matrix (3, 4) como inteiro
Indica que Matrix é uma matriz de números inteiros bidimensional.
⑤Dim MyMatrix (1 a 5, 4 a 9, 3 a 5) como duplo
Indica que MyMatrix é uma matriz dupla tridimensional com limites superiores e inferiores especificados explicitamente.
⑥ Dim aniversário (1 a 10) como data
Indica que BirthdayDay é uma matriz do tipo Data com índices de 1 a 10.
2. Instrução Base de Opção
A instrução Option Base é usada no nível do módulo para declarar um limite inferior padrão para subscritos de array.
A sintaxe da instrução Option Base é a seguinte:
Opção Base {0 |
Nota: Por padrão, o limite inferior da matriz é 0 e não há necessidade de usar a instrução Option Base neste momento. Se você usar esta instrução para especificar um limite inferior de array de 1, deverá usar a instrução Option Base antes da declaração de array do módulo.
Perceber:
(1) A cláusula To nas instruções Dim, Private, Public, ReDim e Static fornece uma maneira mais flexível de controlar o subscrito da matriz. No entanto, se você não especificar explicitamente um limite inferior usando a cláusula To, poderá usar Option Base para definir o limite inferior padrão como 1. O limite inferior de uma matriz criada usando a função Array também é determinado pelo limite inferior especificado pela instrução Option Base, a menos que o Array seja qualificado por um nome de biblioteca de tipos (como VBA.Array). Se for qualificado por um tipo. nome da biblioteca, o limite inferior da matriz criada usando a função Array será O limite inferior não é afetado pela Option Base.
(1) A instrução Option Base afeta apenas o limite inferior da matriz localizada no módulo que contém a instrução.
Algumas notas sobre declarações de array:
①As regras de nomenclatura para nomes de array são as mesmas para nomes de variáveis.
② O nome do array está entre parênteses, colchetes não podem ser usados, ao contrário da linguagem C.
③O limite inferior do subscrito não deve ser maior que o limite superior.
④ Você pode usar nomes de variáveis ou nomes de constantes (bem como números reais) como limite do subscrito. Quando o limite do subscrito é um nome constante, o tamanho do array é fixo. Quando o limite do subscrito é um nome de variável, o tamanho do array pode ser definido dinamicamente, ou seja, o tamanho do array depende de. o valor da variável durante a execução do programa. Portanto, arrays em VB podem ser divididos em dois tipos de arrays: arrays estáticos e arrays dinâmicos.
3. matriz estática
Um array estático significa que o número de elementos do array é fixo, ou seja, o tamanho do espaço de memória que eles ocupam é fixo. De acordo com as diferentes dimensões das matrizes de tamanho fixo, elas podem ser divididas em matrizes unidimensionais e matrizes multidimensionais.
O formato de sintaxe para declarar um array multidimensional é:
Nome da matriz dim ([lista de limites de subscritos]) [Como tipo de dados]
A forma de definição do limite do subscrito: [limite inferior do subscrito para] limite superior do subscrito
A lista de limites subscritos refere-se aos limites subscritos de cada dimensão da matriz separados por vírgulas, ou seja
[Limite inferior do subscrito para] Limite superior do subscrito, [Limite inferior do subscrito para] Limite superior do subscrito, ..., [Limite inferior do subscrito para] Limite superior do subscrito
(primeira dimensão) (segunda dimensão) (enésima dimensão)
Quando n=1, o array é chamado de array unidimensional; quando n=2, o array é chamado de array bidimensional e assim por diante, quando n=m, o array é chamado de array m-dimensional;
Os exemplos a seguir apresentam o uso de matrizes unidimensionais.
'Declara um array de strings FriendsName com comprimento de 51
Dim FriendsName(50) como string
'Declara uma classe de array inteiro global de comprimento 11
Classe pública (10) como inteiro
O número de elementos em uma matriz unidimensional é (limite superior - limite inferior + 1).
Você pode usar uma instrução de loop para atribuir um valor inicial a um array, como:
Dim I como inteiro
For I = 0 To 11 'Use o controle de fluxo do programa de instruções de loop
C(eu) = eu
Próximo eu
Se um limite inferior não for especificado explicitamente, o limite inferior da matriz será controlado pela instrução Option Base. Se não houver nenhuma instrução Option Base, o limite inferior será padronizado como 0.
A dimensão do array não está limitada a 2. Em VB, pode ser expandida para 60. Em aplicações práticas, não existem muitas aplicações para arrays com mais de três dimensões. Ao definir uma matriz multidimensional, você só precisa de uma instrução Dim para especificar todos os limites subscritos da matriz. O uso de matrizes multidimensionais pode facilmente representar alguns dados estatísticos significativos. Por exemplo:
Dim Profit (16,10,12) como moeda
Esta matriz Profit pode ser usada para representar o lucro de uma determinada loja de departamentos com nome da loja, departamento e mês como parâmetros. Por exemplo: Lucro(2,8,11) representa o lucro do oitavo departamento da segunda filial em novembro.
4. matriz dinâmica
Às vezes não é possível saber o tamanho de um array necessário para atender às necessidades reais antes que o array comece a ser usado. É claro que o tamanho do array pode ser definido como grande o suficiente para atender a qualquer necessidade prática de aplicação, mas esse método é muito ineficiente (um grande desperdício de espaço de memória). Se você usar um array dinâmico, poderá definir com precisão o tamanho do array de acordo com as necessidades reais enquanto o programa está em execução.
Ao declarar um array, não fornecer uma lista de dimensões declara o array como um array dinâmico. Por exemplo:
Dim MyArry() como inteiro
Antes de usar uma matriz dinâmica, você deve usar a instrução ReDim para redefini-la. Por exemplo, o array MyArry declarado anteriormente pode ser definido como um array bidimensional dinâmico usando a seguinte instrução.
ReDim MyArry(10,10)
Você também pode definir matrizes dinâmicas várias vezes executando repetidamente a instrução ReDim. O número máximo de dimensões que podem ser definidas usando ReDim é 60. A instrução ReDim pode alterar o número de elementos em cada dimensão da matriz, mas não o número de dimensões. A seguir está um exemplo de aplicação padrão da instrução ReDim.
Dim MyArry() As Single 'Declara um array dinâmico
ReDim MyArry(30,20,10) 'Redefine o array
ReDim MyArry(50,23,21) 'Redefina o array novamente
A sintaxe do ReDim é a mesma do Dim Além disso, também possui a opção Preserve palavra-chave:
Nome do array ReDim Preserve ([[limite inferior para] limite superior]) [Como tipo de dados]
Por exemplo:
ReDim MyArry (50,23,21)
ReDim Preserve MyArry (50,23,50)
Nota: Ao usar ReDim, redefinir o array fará com que os valores de todos os elementos do array desapareçam, enquanto usar Preserve pode reter os dados. Mas usar Preserve só pode preservar os dados do array ao alterar o tamanho da última dimensão do array. Para matrizes unidimensionais, todos os dados serão retidos, mas para matrizes multidimensionais: apenas o tamanho da última dimensão pode ser alterado para reter todos os dados da matriz, caso contrário ocorrerá um erro.
5. Função LBound e função UBound
Tanto a função LBound quanto a função Ubound retornam dados do tipo Long. O valor obtido pela primeira é o subscrito mínimo disponível para a dimensão da matriz especificada, enquanto o valor obtido pela última é o subscrito máximo. A sintaxe deles é:
LBound(nome do array[, dimensão especificada])
UBound(nome do array[, dimensão especificada])
O nome da matriz é obrigatório. O número especificado de dimensões é opcional e especifica para qual dimensão retornar o limite inferior. 1 representa a primeira dimensão, 2 representa a segunda dimensão e assim por diante. Se a dimensão especificada for omitida, o padrão será 1.
Para saber como usar a função LBound e a função UBound, consulte o exemplo a seguir:
Dim A(1 a 100,3,-3 a 4) As Integer 'Define um array tridimensional, assumindo que a linguagem Option Base não é usada
'a instrução altera o valor padrão do limite inferior da matriz.
Use as funções Lbound e Ubound na matriz A. A lista de valores de retorno é a seguinte
Os limites inferiores padrão para todas as dimensões dependem da configuração da instrução Option Base. Pode-se ver que o uso da função LBound e da função UBound em um array pode ser usado para determinar o número de elementos em um array.
Para matrizes cujas dimensões são especificadas usando uma cláusula To em sua declaração, elas podem usar qualquer número inteiro como limite inferior sem serem restringidas pela instrução Option Base.
6. Recursos avançados de matrizes
Embora os arrays sejam mais comumente usados para armazenar grupos de variáveis, os arrays são úteis de outras maneiras. Você pode atribuir o conteúdo de um array a outro, criar funções que retornem arrays e criar propriedades que retornem arrays. Em muitos casos, essas técnicas podem melhorar o desempenho do aplicativo.
Assim como você pode atribuir o valor de uma variável a outra variável, como StrA = StrB, você também pode atribuir o conteúdo de um array a outro array. Por exemplo, você deseja copiar uma matriz de bytes de um local para outro. Isso pode ser conseguido copiando um byte por vez. O procedimento é o seguinte:
Sub ByteCopy(oldCopy() como byte, newCopy() como byte)
'O parâmetro oldCopy() é o array de origem, newCopy() é o array de destino
Dim i como inteiro
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) 'Redefinir array dinâmico
For i = Lbound(oldCopy) To Ubound(oldCopy) 'Atribuição de loop
novaCópia(i) = antigaCópia(i)
Próximo
Finalizar sub
Uma maneira mais simples e eficiente é atribuir diretamente um array a outro array:
Sub ByteCopy(oldCopy() como byte, newCopy() como byte)
'O parâmetro oldCopy() é o array de origem, newCopy() é o array de destino
newCopy = oldCopy 'Use o array para atribuir diretamente
Finalizar sub
Existem algumas regras a serem lembradas em relação à atribuição de variáveis. Por exemplo, embora uma variável declarada como um inteiro possa ser atribuída a uma variável declarada como long sem problemas, atribuir um long a uma variável inteira pode facilmente levar a um erro de overflow. Além de cumprir as regras relativas às atribuições entre variáveis de tipo de dados, as atribuições de array também devem obedecer a outras regras, incluindo o número de dimensões do array, o tamanho de cada dimensão e se o array é fixo ou dinâmico.
① Vários fatores a serem considerados ao atribuir matrizes com diferentes dimensões e tipos de dados
l O tipo de array no lado esquerdo do operador de atribuição: array fixo (Dim x(1 a 10) como inteiro) ou array dinâmico (Dim x() como inteiro).
l Se a dimensão da matriz no lado esquerdo do operador de atribuição corresponde à dimensão da matriz no lado direito do operador de atribuição.
l Se o número de elementos da matriz em cada dimensão das matrizes em ambos os lados do operador de atribuição corresponde. As dimensões podem corresponder mesmo que a declaração das matrizes seja diferente. Por exemplo, se os elementos de cada dimensão de uma matriz forem numerados a partir de 0 e os elementos de outra matriz forem numerados a partir de 1, as dimensões também poderão corresponder.
l Os tipos de dados de todos os elementos em ambos os lados do operador de atribuição devem ser compatíveis. Estas regras são consistentes com as regras para atribuição de variáveis.
A Tabela 3-6 mostra o impacto destes fatores:
Erros na atribuição de array podem ocorrer em tempo de compilação ou em tempo de execução (por exemplo, se o tipo de dados não puder ser convertido ou se a atribuição tentar declarar novamente (ReDim) um array estático). Projete seu programa para adicionar tratamento de erros para garantir que as matrizes correspondam antes da atribuição.
②Escreva uma função que retorne um array
É possível retornar um conjunto de valores de uma função. Por exemplo, retornar um conjunto de bytes de uma função sem precisar convertê-lo em uma string e vice-versa.
Aqui está um exemplo simples usando uma função que retorna uma matriz de bytes:
Subformulário privado_Load()
Dim b como byte
Dim i como inteiro
Dim ReturnArray() como byte
b = Cbyte(54)
ReturnArray() = ArrayFunction(b) 'Chamar função
Para i = Lbound(ReturnArray) Para Ubound(ReturnArray)
Msgbox ReturnArray(i) 'Percorre a caixa de mensagem pop-up para exibir o valor do array
Próximo
Finalizar sub
Função Pública ArrayFunction(b As Byte) As Byte()
Dim x(2) como byte
x(0) =b
x(1) = b + CByte(200)
x(2) = b + b
ArrayFunction = x 'Retorna o resultado como array x
Função final
Depois de executar o exemplo acima, ReturnArray() é um array de três elementos contendo os valores atribuídos ao array em ArrayFunction. A instrução ArrayFunction passa um array como parâmetro; o tipo de dados do array deve ser igual ao tipo de dados da função (neste caso, bytes). Como esta é uma chamada de função, os parênteses não são necessários ao passar o array.
Perceber:
1. Embora seja possível retornar um array atribuindo a outro array (ArrayFunction = x()), esta abordagem não é recomendada por motivos de desempenho.
2. Um tipo deve ser especificado para a função que retorna um array. Esse tipo pode ser Variant. Dessa forma, a Função X() As Variant() é válida e a Função X() As () falhará.
3. Ao chamar uma função que retorna um array, a variável usada para armazenar o valor de retorno também deve ser um array, e seu tipo de dados deve ser igual ao tipo de retorno da função, caso contrário, um erro de incompatibilidade de tipo será exibido.
Defina uma matriz simples
Existem duas maneiras de definir e inicializar arrays em asp, vamos ver um exemplo de cada:
Método um:
MyArray = Array (janeiro, fevereiro, março, abril, maio, junho, julho, agosto, setembro, outubro, novembro, dezembro)
O tamanho da matriz é determinado pelo número de elementos inicializados.
Método dois:
Dim myArray(2) 'Especifique o tamanho do array
myArray(0)=Janeiro
meuArray(1)=fevereiro
Expansão dinâmica de array
DIM meuArray()
REDIM myArray(20) 'Redefine o tamanho do array para 20
ReDim Preserve MyArray(i) 'Preserve retém os dados originais no array
matriz bidimensional
Exemplo:
dim MyArray(5,10) 'define um array bidimensional
Exemplo de atribuição bidimensional:
MYArray(3,3)=100
Existe também um método de implementação disfarçado para arrays bidimensionais:
dimMyArray(5)
MyArray(0)=Array(...) 'Matriz unidimensional
MyArray(1)=Array(...)'Matriz unidimensional
...
Ao acessar, utilize o formato MyArray(x)(y)
índice de matriz
Use o método acima para definir uma matriz. O subscrito do primeiro elemento de cada matriz de dimensão é 0 e o subscrito do último elemento é o número de elementos -1.
Mas você também pode especificar o subscrito da matriz, como:
dim MyArray1(3 to 10) 'O subscrito é de 3 a 10, MyArray(3) obtém o valor do primeiro elemento
Funções de array úteis
Função Ubound (nome do array) - retorna o subscrito do último elemento do array.
Função Lbound (nome do array) - retorna o subscrito do primeiro elemento do array, o padrão é 0.
Mais aplicações:
Função de classificação de array
função Classificar (ary)
KeepChecking = VERDADEIRO
Faça até KeepChecking = FALSE
KeepChecking = FALSO
Para I = 0 para UBound(ary)
Se I = UBound (ary) então saia para
Se ary(I) > ary(I+1) Então
PrimeiroValor = ary(I)
SegundoValor = ary(I+1)
ary(I) = SegundoValor
ary(I+1) = PrimeiroValor
KeepChecking = VERDADEIRO
Terminar se
Próximo
Laço
Classificar = ary
Função final
Exemplo de aplicação de função de classificação de array
DimMyArray
MinhaArray = Matriz(1,5,123,12,98)
MeuArray = Classificar(MeuArray)
Para I = Lbound(MyArray) para Ubound(MyArray)
Response.Write MyArray(I) & <br>
Próximo
Divida uma string e retorne um array
DimMyArray
MyArray = Split(string, separador)
Para I = Lbound(MyArray) para Ubound(MyArray)
Response.Write MyArray(I) & <br>
Próximo
Usando arrays em aplicativos e sessões
Aplicativo.Lock
Aplicativo (StoredArray) = MeuArray
Aplicativo.Desbloquear
LocalArray = Aplicativo (StoredArray)
Substituir matriz no aplicativo
Aplicativo.Lock
Aplicativo(StoredArray) = LocalArray
Aplicativo.Desbloquear
O uso da sessão é igual ao do aplicativo
Importar dados do banco de dados para o array
DimMyArray
Obtenha todos os registros
MeuArray = RS.GetRows
Obtenha os primeiros 10 registros
MeuArray = RS.GetRows(10)
Para linha = 0 Para UBound(MyArray, 2)
Para col = 0 Para UBound(MyArray, 1)
Response.Write (coluna, linha) & <br>
Próximo
Próximo
Passar array para outra página
Existem muitas maneiras de passar um array para outra página, como as três seguintes:
1. Defina uma string separada por vírgula e use a função Split para recriar a matriz na próxima página.
2. Armazene o array em uma variável de sessão e chame-o na próxima página.
3. Passe o array pela área oculta do formulário. Eles são automaticamente separados por vírgulas e, em seguida, use a função Split para recriar o array.
Os dois primeiros métodos são bons, mas ambos são mais complicados que o terceiro. Aqui apresentaremos apenas o terceiro porque é o mais simples.
Arquivo 1.asp:
<%
escurecer eu
escurecer meuArray(20)
para I = 0 a 20
myArray(I)=Item & I
próximo
%>
<html>
<corpo>
<nome do formulário=método do formulário de teste=post action=2.asp>
<%
para I=0 para ubound(myArray)
resposta.write <tipo de entrada = nome oculto = valor myArray =' & myArray (I) & '>
próximo
%>
<p>
<tipo de entrada = enviar>
</form>
</body>
</html>
O que fizemos acima foi usar um campo implícito separado para armazenar cada elemento do array em um formulário. Vejamos a próxima página:
Arquivo 2.asp
<html>
<corpo>
<%
dim arrString
escurecer meuArray
escurecer eu
arrString=solicitação(meuArray)
meuArray = split(arrString,,)
para I=0 para ubound(myArray)
resposta.write Item &I& = & myArray(I) & <br> & vbCrLf
próximo
%>
</body>
</html>