Una matriz es una colección de datos ordenados. Es posible que los elementos de la matriz no pertenezcan al mismo tipo de datos. Utilice un nombre de matriz unificado y un subíndice para identificar de forma única los elementos de la matriz. Cambiar un elemento no afectará a otros elementos. Los subíndices de las matrices están acotados y divididos en límites inferiores y límites superiores. Las matrices se pueden declarar usando Dim, Private, Public o Static, y sus formatos de sintaxis son los mismos. Lo siguiente solo presenta el método de usar Dim para declarar una matriz.
1. Definición y declaración de matriz.
La sintaxis de definición de una matriz es la siguiente:
Nombre de matriz tenue ([[límite inferior del subíndice A] límite superior del subíndice]) [Como tipo de datos]
Por ejemplo (suponiendo que el límite inferior predeterminado para las matrices en el módulo actual es 0)):
① Dim A(10) como número entero
Indica que el nombre de la matriz es A. El límite inferior del subíndice de esta matriz es el valor predeterminado 0 y el límite superior del subíndice es 10. Hay 11 elementos de tipo entero, desde A (0), A (1 ) a A(10).
② Dim B (1 a 20) como número entero
Indica que el nombre de la matriz es B. El límite inferior del subíndice de esta matriz es 1, el límite superior del subíndice es 20 y hay 20 elementos de tipo Integer, de B (1) a B (20).
③Dim DayArray(50)
Indica que DayArray es una matriz variante con 51 elementos indexados (de 0 a 50).
④ Matriz tenue (3, 4) como número entero
Indica que Matrix es una matriz entera bidimensional.
⑤Atenuar MyMatrix(1 a 5, 4 a 9, 3 a 5) como doble
Indica que MyMatrix es una matriz doble tridimensional con límites superior e inferior especificados explícitamente.
⑥Cumpleaños oscuro (1 a 10) como fecha
Indica que BirthdayDay es una matriz de tipo Fecha con índices del 1 al 10.
2. Declaración base de opciones
La declaración Option Base se utiliza a nivel de módulo para declarar un límite inferior predeterminado para los subíndices de la matriz.
La sintaxis de la declaración Option Base es la siguiente:
Base de opciones {0 | 1}
Nota: De forma predeterminada, el límite inferior de la matriz es 0 y no es necesario utilizar la instrucción Option Base en este momento. Si usa esta declaración para especificar un límite inferior de matriz de 1, debe usar la declaración Option Base antes de la declaración de matriz del módulo.
Aviso:
(1) La cláusula To en las declaraciones Dim, Private, Public, ReDim y Static proporciona una forma más flexible de controlar el subíndice de la matriz. Sin embargo, si no especifica un límite inferior explícitamente usando la cláusula To, puede usar Option Base para establecer el límite inferior predeterminado en 1. El límite inferior de una matriz creada usando la función Array también está determinado por el límite inferior especificado por la instrucción Option Base, a menos que la matriz esté calificada por un nombre de biblioteca de tipos (como VBA.Array). nombre de la biblioteca, entonces el límite inferior de la matriz creada usando la función Matriz es El límite inferior no se ve afectado por Option Base.
(1) La declaración Option Base solo afecta el límite inferior de la matriz ubicada en el módulo que contiene la declaración.
Algunas notas sobre declaraciones de matrices:
①Las reglas de nomenclatura para los nombres de matrices son las mismas que para los nombres de variables.
② El nombre de la matriz está entre paréntesis; no se pueden utilizar corchetes, a diferencia del lenguaje C.
③El límite inferior del subíndice no debe ser mayor que su límite superior.
④ Puede utilizar nombres de variables o nombres de constantes (así como números reales) como límites de subíndices. Cuando el límite del subíndice es un nombre constante, el tamaño de la matriz es fijo. Cuando el límite del subíndice es un nombre de variable, el tamaño de la matriz se puede definir dinámicamente, es decir, el tamaño de la matriz depende de. el valor de la variable durante la ejecución del programa. Por lo tanto, las matrices en VB se pueden dividir en dos tipos de matrices: matrices estáticas y matrices dinámicas.
3. matriz estática
Una matriz estática significa que el número de elementos de la matriz es fijo, es decir, el tamaño del espacio de memoria que ocupan es fijo. Según las diferentes dimensiones de las matrices de tamaño fijo, se pueden dividir en matrices unidimensionales y matrices multidimensionales.
El formato de sintaxis para declarar una matriz multidimensional es:
Nombre de matriz tenue ([lista de límites de subíndice]) [Como tipo de datos]
La forma de definición del límite del subíndice: [límite inferior del subíndice A] límite superior del subíndice
La lista de límites de subíndice se refiere a los límites de subíndice de cada dimensión de la matriz separados por comas, es decir
[Subíndice límite inferior A] Subíndice límite superior, [Subíndice límite inferior A] Subíndice límite superior, ..., [Subíndice límite inferior A] Subíndice límite superior
(primera dimensión) (segunda dimensión) (enésima dimensión)
Cuando n = 1, la matriz se denomina matriz unidimensional; cuando n = 2, la matriz se denomina matriz bidimensional, y así sucesivamente, cuando n = m, la matriz se denomina matriz m-dimensional.
Los siguientes ejemplos introducen el uso de matrices unidimensionales.
'Declaramos una matriz de cadenas FriendsName con una longitud de 51
Dim FriendsName(50) como cadena
'Declarar una clase de matriz de enteros global de longitud 11
Clase pública (10) como número entero
El número de elementos en una matriz unidimensional es (límite superior - límite inferior + 1).
Puede utilizar una instrucción de bucle para asignar un valor inicial a una matriz, como por ejemplo:
Atenuar I como número entero
Para I = 0 a 11 'Utilice el control de flujo del programa de declaraciones de bucle
C(yo) = yo
siguiente yo
Si no se especifica explícitamente un límite inferior, el límite inferior de la matriz está controlado por la instrucción Option Base. Si no hay una declaración de base de opciones, el límite inferior por defecto es 0.
La dimensión de la matriz no se limita a 2. En VB, se puede ampliar a 60. En aplicaciones prácticas, no hay muchas aplicaciones para matrices con más de tres dimensiones. Al definir una matriz multidimensional, solo necesita una declaración Dim para especificar todos los límites de subíndice de la matriz. El uso de matrices multidimensionales puede representar fácilmente algunos datos estadísticos significativos. Por ejemplo:
Beneficio débil (16,10,12) como moneda
Esta matriz de ganancias se puede utilizar para representar las ganancias de una determinada tienda departamental con el nombre de la tienda, el departamento y el mes como parámetros. Por ejemplo: Beneficio (2,8,11) representa el beneficio del octavo departamento de la segunda sucursal en noviembre.
4. matriz dinámica
A veces no es posible saber qué tan grande se necesita una matriz para satisfacer las necesidades reales antes de comenzar a utilizarla. Por supuesto, el tamaño de la matriz se puede definir para que sea lo suficientemente grande como para satisfacer cualquier necesidad de aplicación práctica, pero este método es muy ineficiente (una gran pérdida de espacio de memoria). Si utiliza una matriz dinámica, puede definir con precisión el tamaño de la matriz de acuerdo con las necesidades reales mientras se ejecuta el programa.
Al declarar una matriz, no proporcionar una lista de dimensiones declara la matriz como una matriz dinámica. Por ejemplo:
Dim MyArry() como número entero
Antes de utilizar una matriz dinámica, debe utilizar la instrucción ReDim para redefinirla. Por ejemplo, la matriz MyArry declarada anteriormente se puede definir como una matriz dinámica bidimensional usando la siguiente declaración.
ReDim MyArry(10,10)
También puede definir matrices dinámicas varias veces ejecutando repetidamente la instrucción ReDim. El número máximo de dimensiones que se pueden definir usando ReDim es 60. La declaración ReDim puede cambiar la cantidad de elementos en cada dimensión de la matriz, pero no la cantidad de dimensiones. El siguiente es un ejemplo de una aplicación estándar de la declaración ReDim.
Dim MyArry() As Single 'Declarar una matriz dinámica
ReDim MyArry(30,20,10) 'Redefinir la matriz
ReDim MyArry(50,23,21) 'Redefinir la matriz nuevamente
La sintaxis de ReDim es la misma que la de Dim. Además, también tiene la opción Conservar palabra clave:
ReDim Preservar nombre de matriz ([[límite inferior A] límite superior]) [Como tipo de datos]
Por ejemplo:
ReDim MyArry(50,23,21)
ReDim Preservar MyArry(50,23,50)
Nota: Al usar ReDim, redefinir la matriz hará que los valores de todos los elementos de la matriz desaparezcan, mientras que usar Preserve puede retener los datos. Pero el uso de Conservar solo puede conservar los datos de la matriz cuando se cambia el tamaño de la última dimensión de la matriz. Para matrices unidimensionales, se conservarán todos los datos, pero para matrices multidimensionales: solo se puede cambiar el tamaño de la última dimensión para conservar todos los datos de la matriz; de lo contrario, se producirá un error.
5. Función LBound y función UBound
Tanto la función LBound como la función Ubound devuelven datos de tipo Long. El valor obtenido por la primera es el subíndice mínimo disponible para la dimensión de la matriz especificada, mientras que el valor obtenido por la segunda es el subíndice máximo. Su sintaxis es:
LBound(nombre de la matriz [, dimensión especificada])
UBound(nombre de la matriz [, dimensión especificada])
El nombre de la matriz es obligatorio. El número especificado de dimensiones es opcional y especifica para qué dimensión devolver el límite inferior. 1 representa la primera dimensión, 2 representa la segunda dimensión, y así sucesivamente. Si se omite la dimensión especificada, el valor predeterminado es 1.
Para saber cómo utilizar la función LBound y la función UBound, consulte el siguiente ejemplo:
Dim A(1 a 100,3,-3 a 4) As Integer 'Define una matriz tridimensional, suponiendo que no se utiliza el lenguaje Option Base
'la declaración cambia el valor predeterminado del límite inferior de la matriz.
Utilice las funciones Lbound y Ubound en la matriz A. La lista de valores de retorno es la siguiente
Los límites inferiores predeterminados para todas las dimensiones dependen de la configuración de la instrucción Option Base. Se puede ver que el uso de la función LBound y la función UBound en una matriz se puede usar para determinar la cantidad de elementos en una matriz.
Para las matrices cuyas dimensiones se especifican mediante una cláusula To en su declaración, pueden usar cualquier número entero como límite inferior sin estar restringido por la declaración Option Base.
6. Funciones avanzadas de las matrices.
Aunque las matrices se utilizan más comúnmente para almacenar grupos de variables, las matrices son útiles de otras maneras. Puede asignar el contenido de una matriz a otra, crear funciones que devuelvan matrices y puede crear propiedades que devuelvan matrices. En muchos casos, estas técnicas pueden mejorar el rendimiento de la aplicación.
Así como puedes asignar el valor de una variable a otra variable, como StrA = StrB, también puedes asignar el contenido de una matriz a otra matriz. Por ejemplo, desea copiar una matriz de bytes de una ubicación a otra. Esto se puede lograr copiando un byte a la vez. El procedimiento es el siguiente:
Sub ByteCopy(oldCopy() como byte, newCopy() como byte)
'El parámetro oldCopy() es la matriz de origen, newCopy() es la matriz de destino
Atenuar i como entero
ReDim newCopy (Lbound(oldCopy) To UBound(oldCopy)) 'Redefinir matriz dinámica
For i = Lbound(oldCopy) To Ubound(oldCopy) 'Asignación de bucle
copia nueva(i) = copia antigua(i)
Próximo
Subtítulo final
Una forma más sencilla y eficiente es asignar directamente una matriz a otra matriz:
Sub ByteCopy(oldCopy() como byte, newCopy() como byte)
'El parámetro oldCopy() es la matriz de origen, newCopy() es la matriz de destino
newCopy = oldCopy 'Usa la matriz para asignar valores directamente
Subtítulo final
Hay algunas reglas a tener en cuenta con respecto a la asignación de variables. Por ejemplo, aunque una variable declarada como un número entero se puede asignar a una variable declarada como larga sin ningún problema, asignar una variable larga a una variable entera puede provocar fácilmente un error de desbordamiento. Además de cumplir con las reglas relativas a las asignaciones entre variables de tipo de datos, las asignaciones de matrices también deben cumplir con otras reglas, incluido el número de dimensiones de la matriz, el tamaño de cada dimensión y si la matriz es fija o dinámica.
① Varios factores a considerar al asignar matrices con diferentes dimensiones y tipos de datos
l El tipo de matriz en el lado izquierdo del operador de asignación: matriz fija (Dim x(1 a 10) As Integer) o matriz dinámica (Dim x() As Integer).
l Si la dimensión de la matriz en el lado izquierdo del operador de asignación coincide con la dimensión de la matriz en el lado derecho del operador de asignación.
l Si coincide el número de elementos de la matriz en cada dimensión de las matrices en ambos lados del operador de asignación. Las dimensiones pueden coincidir incluso si la declaración de las matrices es diferente. Por ejemplo, si los elementos de cada dimensión de una matriz están numerados a partir de 0 y los elementos de otra matriz están numerados a partir de 1, las dimensiones también pueden coincidir.
l Los tipos de datos de todos los elementos en ambos lados del operador de asignación deben ser compatibles. Estas reglas son consistentes con las reglas para la asignación de variables.
La Tabla 3-6 muestra el impacto de estos factores:
Pueden ocurrir errores en la asignación de matrices en tiempo de compilación o en tiempo de ejecución (por ejemplo, si el tipo de datos no se puede convertir o la asignación intenta volver a declarar (ReDim) una matriz estática). Diseñe su programa para agregar manejo de errores para garantizar que las matrices coincidan antes de la asignación.
②Escribe una función que devuelva una matriz
Es posible devolver un conjunto de valores de una función. Por ejemplo, devolver un conjunto de bytes de una función sin tener que convertirlo en una cadena y viceversa.
A continuación se muestra un ejemplo sencillo que utiliza una función que devuelve una matriz de bytes:
Subformulario privado_Load()
Dim b como byte
Atenuar i como entero
Dim ReturnArray() como byte
b = Cbyte(54)
ReturnArray() = ArrayFunction(b) 'Llamar función
Para i = Lbound(ReturnArray) a Ubound(ReturnArray)
Msgbox ReturnArray(i) 'Recorre el cuadro de mensaje emergente para mostrar el valor de la matriz
Próximo
Subtítulo final
Función de matriz pública (b como byte) como byte ()
Dim x(2) como byte
x(0) = segundo
x(1) = b + CByte(200)
x(2) = segundo + segundo
ArrayFunction = x 'devuelve el resultado como matriz x
Función final
Después de ejecutar el ejemplo anterior, ReturnArray() es una matriz de tres elementos que contiene los valores asignados a la matriz en ArrayFunction. La instrucción ArrayFunction pasa una matriz como parámetro; el tipo de datos de la matriz debe ser el mismo que el tipo de datos de la función (bytes en este caso). Debido a que se trata de una llamada a función, los paréntesis no son necesarios al pasar la matriz.
Aviso:
1. Aunque es posible devolver una matriz asignándola a otra matriz (ArrayFunction = x()), este enfoque no se recomienda por razones de rendimiento.
2. Se debe especificar un tipo para la función que devuelve una matriz. Este tipo puede ser Variante. De esta manera, la Función X() As Variant() es válida y la Función X() As () fallará.
3. Al llamar a una función que devuelve una matriz, la variable utilizada para almacenar el valor de retorno también debe ser una matriz y su tipo de datos debe ser el mismo que el tipo de retorno de la función; de lo contrario, se mostrará un error de discrepancia de tipos.
Definir una matriz simple
Hay dos formas de definir e inicializar arrays en asp, veamos un ejemplo de cada una:
Método uno:
Mimatriz = Matriz(enero, febrero, marzo, abril, mayo, junio, julio, agosto, septiembre, octubre, noviembre, diciembre)
El tamaño de la matriz está determinado por la cantidad de elementos inicializados.
Método dos:
Dim myArray(2) 'Especifica el tamaño de la matriz
miArray(0)=Ene
miArray(1)=febrero
Expansión dinámica de matriz
DIM miArray()
REDIM myArray(20) 'Redefine el tamaño de la matriz a 20
ReDim Preserve MyArray(i) 'Preserve conserva los datos originales en la matriz
matriz bidimensional
Ejemplo:
dim MyArray(5,10) 'define una matriz bidimensional
Ejemplo de asignación bidimensional:
MYArray(3,3)=100
También existe un método de implementación disfrazado para matrices bidimensionales:
atenuarMiArray(5)
MyArray(0)=Array(...) 'Matriz unidimensional
MyArray(1)=Array(...)'Matriz unidimensional
...
Al acceder, utilice el formato MyArray(x)(y)
índice de matriz
Utilice el método anterior para definir una matriz. El subíndice del primer elemento de cada matriz de dimensión es 0 y el subíndice del último elemento es el número de elementos -1.
Pero también puedes especificar el subíndice de la matriz, como por ejemplo:
dim MyArray1(3 a 10) 'El subíndice es del 3 al 10, MyArray(3) obtiene el valor del primer elemento
Funciones de matriz útiles
Función Ubound (nombre de la matriz): devuelve el subíndice del último elemento de la matriz.
Función Lbound (nombre de la matriz): devuelve el subíndice del primer elemento de la matriz; el valor predeterminado es 0.
Más aplicaciones:
Función de clasificación de matrices
función ordenar (ario)
Seguir comprobando = VERDADERO
Hacer hasta que KeepChecking = FALSO
Seguir comprobando = FALSO
Para I = 0 a UBound(ary)
Si I = UBound(ary) entonces salga por
Si ary(I) > ary(I+1) Entonces
PrimerValor = ario(I)
SegundoValor = ario(I+1)
ario(I) = SegundoValor
ario(I+1) = PrimerValor
Seguir comprobando = VERDADERO
Terminar si
Próximo
Bucle
ordenar = ario
Función final
Ejemplo de aplicación de función de clasificación de matrices
DimMyArray
Mimatriz = Matriz(1,5,123,12,98)
Mimatriz = Ordenar(Mimatriz)
Para I = Lbound(MyArray) a Ubound(MyArray)
Respuesta.Escribir MyArray(I) & <br>
Próximo
Dividir una cadena y devolver una matriz
DimMyArray
MyArray = Dividir (cadena, separador)
Para I = Lbound(MyArray) a Ubound(MyArray)
Respuesta.Escribir MyArray(I) & <br>
Próximo
Usando matrices en Aplicación y Sesión
Bloqueo de aplicación
Aplicación (StoredArray) = MyArray
Aplicación.Desbloquear
LocalArray = Aplicación (StoredArray)
Sobrescribir matriz en la aplicación
Bloqueo de aplicación
Aplicación (StoredArray) = LocalArray
Aplicación.Desbloquear
El uso de la sesión es el mismo que el de la aplicación.
Importar datos de la base de datos a una matriz
DimMyArray
Obtener todos los registros
Mimatriz = RS.GetRows
Consigue los primeros 10 registros
Mimatriz = RS.GetRows(10)
Para fila = 0 a UBound(MyArray, 2)
Para col = 0 a UBound(MyArray, 1)
Respuesta.Escribir (col, fila) & <br>
Próximo
Próximo
Pasar matriz a otra página
Hay muchas formas de pasar una matriz a otra página, como las tres siguientes:
1. Defina una cadena separada por comas y luego use la función Dividir para volver a crear la matriz en la página siguiente.
2. Guarde la matriz en una variable de sesión y luego llámela en la página siguiente.
3. Pase la matriz a través del área oculta del formulario. Se separan automáticamente por comas y luego use la función Dividir para volver a crear la matriz.
Los dos primeros métodos son buenos, pero ambos son más complicados que el tercero. Aquí sólo presentaremos el tercero porque es el más sencillo.
Archivo 1.asp:
<%
oscuro yo
atenuar miArray(20)
para I=0 a 20
myArray(I)=Artículo y yo
próximo
%>
<html>
<cuerpo>
<nombre del formulario=método del formulario de prueba=acción de publicación=2.asp>
<%
para I=0 a ubound(myArray)
respuesta.write <tipo de entrada=nombre oculto=valor de mimatriz=' & mimatriz(I) & '>
próximo
%>
<p>
<tipo de entrada=enviar>
</formulario>
</cuerpo>
</html>
Lo que hicimos arriba es usar un campo implícito separado para almacenar cada elemento de la matriz en un formulario. Veamos la página siguiente:
Archivo 2.asp
<html>
<cuerpo>
<%
cadena de arreglo tenue
atenuar mi matriz
oscuro yo
arrString=solicitud(miMatriz)
miArray = dividir(arrString,,)
para I=0 a ubound(myArray)
respuesta.escribir elemento &I& = & myArray(I) & <br> & vbCrLf
próximo
%>
</cuerpo>
</html>