Visual Basic .Net nos permite crear matrices irregulares o escalonadas. Se dice que una matriz es irregular si la cantidad de elementos de cada fila varía. Luego podemos imaginar una matriz irregular:

Como podemos ver la fila cero tiene reservado dos espacios, la fila uno reserva cuatro espacios y la última fila reserva espacio para tres componentes.
La sintaxis para declarar un atributo de tipo matriz irregular es:
Private mat()() As Integer
Primero creamos la cantidad de filas dejando vacío el espacio que indica la cantidad de columnas, en nuestro ejemplo la matriz tiene 3 filas (disponemos un 2 ya que las filas comienzan a numerarse desde cero):
mat = New Integer(2)() {}
Luego debemos ir creando cada fila de la matriz indicando el índice de la respectiva fila:
mat(0) = New Integer(1) {}
mat(1) = New Integer(3) {}
mat(0) = New Integer(2) {}
Luego la forma para acceder a sus componentes debe ser utilizando paréntesis abiertos y cerrados para cada índice:
mat(0)(0) = 19
Dará un error si queremos cargar la tercer componente de la fila cero (esto debido a que no existe):
mat(0)(2) = 230
Luego si queremos saber la cantidad de filas que tiene la matriz:
Console.Write(mat.GetUpperBound(0))
Si queremos saber la cantidad de elementos de una determinada fila:
Console.Write("Cantidad de elementos de la fila 0:" & mat(0).GetUpperBound(0))
Console.Write("Cantidad de elementos de la fila 1:" & mat(1).GetUpperBound(0))
Console.Write("Cantidad de elementos de la fila 2:" & mat(2).GetUpperBound(0))
Confeccionaremos un programa que permita crear una matriz irregular y luego imprimir la matriz en forma completa.
Module Module1
Public Class MatrizIrregular1
Private mat()() As Integer
Public Sub Cargar()
Dim filas As Integer
Console.Write("Cuantas fila tiene la matriz:")
filas = Console.ReadLine()
mat = New Integer(filas - 1)() {}
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
Console.Write("Cuantas elementos tiene la fila " & f & ":")
Dim elemento As Integer = Console.ReadLine()
mat(f) = New Integer(elemento - 1) {}
For c = 0 To mat(f).GetUpperBound(0)
Console.Write("Ingrese componente:")
mat(f)(c) = Console.ReadLine()
Next
Next
End Sub
Public Sub Imprimir()
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
For c = 0 To mat(f).GetUpperBound(0)
Console.Write(mat(f)(c) & " ")
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
End Class
Sub Main()
Dim mi As New MatrizIrregular1()
mi.Cargar()
mi.Imprimir()
End Sub
End Module
El resultado de ejecutar este programa es:
Declaramos una matriz irregular:
Private mat()() As Integer
Primero creamos la cantidad de filas que tendrá la matriz (en los paréntesis para las columnas no disponemos valor):
Dim filas As Integer
Console.Write("Cuantas fila tiene la matriz:")
filas = Console.ReadLine()
mat = New Integer(filas - 1)() {}
Dentro del primer For pedimos que ingrese la cantidad de elementos que tendrá cada fila y utilizamos el operador New nuevamente, pero en este caso se están creando cada fila de la matriz (Visual Basic .Net trata a cada fila como un vector):
For f = 0 To mat.GetUpperBound(0)
Console.Write("Cuantas elementos tiene la fila " & f & ":")
Dim elemento As Integer = Console.ReadLine()
mat(f) = New Integer(elemento - 1) {}
Dentro del For interno hacemos la carga de las componentes propiamente dicho de la matriz irregular (podemos ir cargando cada fila a medida que las vamos creando):
For c = 0 To mat(f).GetUpperBound(0)
Console.Write("Ingrese componente:")
mat(f)(c) = Console.ReadLine()
Next
Luego imprimimos la matriz en forma completa teniendo cuidado los valores finales de cada For.
El primer For se repite tantas veces como filas tiene la matriz: mat.GetUpperBound(0) y
el For interno se repite tantas veces como elementos tiene la fila que estamos procesando mat(f).GetUpperBound(0):
Public Sub Imprimir()
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
For c = 0 To mat(f).GetUpperBound(0)
Console.Write(mat(f)(c) & " ")
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
Module Module1
Public Class MatrizIrregular2
Private mat()() As Integer
Public Sub Cargar()
mat = New Integer(4)() {}
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
mat(f) = New Integer(f) {}
For c = 0 To mat(f).GetUpperBound(0)
Console.Write("Ingrese componente:")
mat(f)(c) = Console.ReadLine()
Next
Next
End Sub
Public Sub Imprimir()
Dim f, c As Integer
For f = 0 To mat.GetUpperBound(0)
For c = 0 To mat(f).GetUpperBound(0)
Console.Write(mat(f)(c) & " ")
Next
Console.WriteLine()
Next
Console.ReadKey()
End Sub
End Class
Sub Main()
Dim ma As New MatrizIrregular2()
ma.Cargar()
ma.Imprimir()
End Sub
End Module
Module Module1
Public Class MatrizIrregular3
Private nombres(2) As String
Private dias()() As Integer
Public Sub Cargar()
dias = New Integer(2)() {}
Dim f, c As Integer
For f = 0 To nombres.GetUpperBound(0)
Console.Write("Ingrese el nombre del empleado:")
nombres(f) = Console.ReadLine()
Console.Write("Cuantas días faltó el empleado:")
Dim faltas As Integer
faltas = Console.ReadLine()
dias(f) = New Integer(faltas - 1) {}
For c = 0 To dias(f).GetUpperBound(0)
Console.Write("Ingrese nro de día:")
dias(f)(c) = Console.ReadLine()
Next
Next
End Sub
Public Sub Inasistencias()
Dim f As Integer
For f = 0 To nombres.GetUpperBound(0)
Console.WriteLine(nombres(f) & " faltó " & (dias(f).GetUpperBound(0) + 1) & " días")
Next
End Sub
Public Sub EmpleadoMensosFaltas()
Dim faltas As Integer = dias(0).GetUpperBound(0)
Dim nom As String = nombres(0)
Dim f As Integer
For f = 1 To dias.GetUpperBound(0)
If dias(f).GetUpperBound(0) < faltas Then
faltas = dias(f).GetUpperBound(0)
nom = nombres(f)
End If
Next
Console.WriteLine("El empleado que faltó menos es " & nom & " con " & (faltas + 1) & " faltas.")
Console.ReadKey()
End Sub
End Class
Sub Main()
Dim ma = New MatrizIrregular3()
ma.Cargar()
ma.Inasistencias()
ma.EmpleadoMensosFaltas()
End Sub
End Module