• Publicidad

Array con tipos de datos dentro

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Array con tipos de datos dentro

Notapor slopal » 2006-03-06 15:05 @670

Hola, necesitaría algo así, como un array que se acceda por su índice {0, 1, ... n-1}, y que dentro de cada $array hubiera una lista que se pueda llenar, consultar y tal.

Me he mirado el tema de las tablas de [i]hash
, pero hay que declarar cada posición, ¿verdad? Yo simplemente quiero acceder con el típico índice 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 veis que es demasiado lento o lo que sea, y sería mejor otra opción (que yo sea capaz de entender y hacer :roll: , ¡me la decís!)

THXXX
slopal
Perlero nuevo
Perlero nuevo
 
Mensajes: 78
Registrado: 2005-11-23 11:41 @528

Publicidad

Notapor Perl user » 2006-03-06 15:57 @706

¿Qué tal?

Lo que necesitas leer son los manuales de perllol y perldsc.

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Re: Array con tipos de datos dentro

Notapor explorer » 2006-03-06 17:03 @752

slopal escribiste:Hola, necesitaría algo así, como un array que se acceda por su índice {0, 1, ... n-1}, y que dentro de cada array hubiera una lista que se pueda llenar, consultar y tal.

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

@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:

@lista = (1,2,3,4,5);
$vector[24] = \@lista;


Para poner la lista en la posición vigésimo quinta.

slopal escribiste:Y si eso se pudiera hacer, ya para completar, me iría de coña que en realidad fuera:
[i]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]

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,5,7,99,336,68 ] ); print Dumper @a'
  2. $VAR1 = undef;
  3. $VAR2 = undef;
  4. $VAR3 = [
  5.           24,
  6.           [
  7.             1,
  8.             5,
  9.             7,
  10.             99,
  11.             336,
  12.             68
  13.           ]
  14.         ];
  15.  
  16. explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,2,3,4,5 ] ); print $a[2][0]'
  17. 24
  18. explorer@next3:~> perl -MData::Dumper -le 'push @{$a[2]}, ( 24, [ 1,2,3,4,5 ] ); print $a[2][1][3]'
  19. 4
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.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:

$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:

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados