Lun Mar 06, 2006 2:05 pm
|
 |
slopal
Perlero Nuevo

|
Registrado: 23 Nov 2005
Mensajes: 78
|
|
| Array con tipos de datos dentro |
|
|
Hola, necesitaría algo así, como un array que se acceda por su índice {0, 1, ... n-1}, y que dentro de cada array[i] hubiera una lista que se pueda llenar, consultar y tal.
Me he mirado el tema de las tablas de hash, pero hay que declarar cada posición verdad? Yo simplemente quiero acceder con el típico indice de un vector...
Y si eso se pudiera hacer, ya para completar, me iría de coña que en realidad fuera:
array donde en cada posición hubieran "dos casillas" (como una matriz n x 2), y en la primera casilla hubiera un número y en la segunda una lista.
Por ejemplo:
array[$1] = [24][(1,5,7,99,336,68]
espero que quede claro, gracias igualmente!
Si véis que es demasiado lento o lo que sea, y sería mejor otra opción (que yo sea capaz de entender y hacer , me la decís!)
THXXX |
|
|
|

Lun Mar 06, 2006 2:57 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
|
|
|
Que tal,
Lo que necesitas leer son los manuales de perllol y perldsc.
Saludos, |
|

Lun Mar 06, 2006 4:03 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4128
Ubicación: Valladolid, España
|
|
| Re: Array con tipos de datos dentro |
|
|
| slopal escribió: | | Hola, necesitaría algo así, como un array que se acceda por su índice {0, 1, ... n-1}, y que dentro de cada array[i] hubiera una lista que se pueda llenar, consultar y tal. |
| Código: |
push @vector, [1,2,3,4,5];
print $vector[0][2]; # 3 |
Lo que hacemos es 'meter' (push) en el @vector, una referencia a una lista ([]). Algo así como
| Código: |
@lista=(1,2,3,4,5);
push @vector, \@lista; |
y de esa manera ya tenemos una variable con dos dimensiones ($vector[0][2], que realmente es $vector[0]->[2], porque el elemento 0-ésimo de vector es una referencia, tenemos que desreferenciarla (->) y lo que obtenemos es acceso a otra lista, de la cual extraemos el tercer elemento ([2]))
También se podía haber hecho:
| Código: |
@lista = (1,2,3,4,5);
$vector[24] = \@lista; |
para poner la lista en la posición vigesimo quinta.
| slopal escribió: | Y si eso se pudiera hacer, ya para completar, me iría de coña que en realidad fuera:
array donde en cada posición hubieran "dos casillas" (como una matriz n x 2), y en la primera casilla hubiera un número y en la segunda una lista.
Por ejemplo:
array[$1] = [24][(1,5,7,99,336,68] |
| Código: |
explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,5,7,99,336,68 ] ); print Dumper @a'
$VAR1 = undef;
$VAR2 = undef;
$VAR3 = [
24,
[
1,
5,
7,
99,
336,
68
]
];
explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,2,3,4,5 ] ); print $a[2][0]'
24
explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,2,3,4,5 ] ); print $a[2][1][3]'
4 |
Lo mismo que antes, con push metemos una lista en el tercero elemento de @a. Y esa lista está compuesta de dos elementos, un escalar y una referencia a otra lista. Se podría haber escrito también como:
| Código: |
$a[2] = [ 24, [ 1,2,3,4,5 ] ];
print $a[2][0]; # 24
print $a[2][1][1]; # 2 |
Finalmente, para agregar más elementos a la lista que está dentro de la lista:
| Código: |
push @{$a[2][1]}, 7;
print $a[2][1][-1]; # 7 (Estamos pintando el último elemento de la lista (2º elemento) que está en el tercer elemento de @a |
Recetario de estructuras de datos en Perl.
Manipulando arrays de arrays.
PerlFAQ4. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|