in

Perl: matrices


Una matriz es una variable que almacena una lista ordenada de valores escalares. Las variables de matriz están precedidas por un signo «arroba» (& commat;). Para hacer referencia a un solo elemento de una matriz, utilizará el signo de dólar ($) con el nombre de la variable seguido del índice del elemento entre corchetes.

Aquí hay un ejemplo simple de cómo usar las variables de matriz:

#!/usr/bin/perl

@ages = (25, 30, 40);             
@names = ("John Paul", "Lisa", "Kumar");

print "$ages[0] = $ages[0]n";
print "$ages[1] = $ages[1]n";
print "$ages[2] = $ages[2]n";
print "$names[0] = $names[0]n";
print "$names[1] = $names[1]n";
print "$names[2] = $names[2]n";

Aquí hemos utilizado el signo de escape () antes del signo $ solo para imprimirlo. Otro Perl lo entenderá como una variable e imprimirá su valor. Cuando se ejecuta, esto producirá el siguiente resultado:

$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = John Paul
$names[1] = Lisa
$names[2] = Kumar

En Perl, los términos List y Array se usan a menudo como si fueran intercambiables. Pero la lista son los datos y la matriz es la variable.

Creación de matrices

Las variables de matriz tienen el prefijo & commat; sign y se completan utilizando paréntesis o el operador qw. Por ejemplo

@array = (1, 2, 'Hello');
@array = qw/This is an array/;

La segunda línea usa el operador qw //, que devuelve una lista de cadenas, separando la cadena delimitada por espacios en blanco. En este ejemplo, esto conduce a una matriz de cuatro elementos; el primer elemento es ‘esto’ y el último (cuarto) es ‘matriz’. Esto significa que puede usar diferentes líneas de la siguiente manera:

@days = qw/Monday
Tuesday
...
Sunday/;

También puede completar una matriz asignando cada valor individualmente de la siguiente manera:

$array[0] = 'Monday';
...
$array[6] = 'Sunday';

Acceso a elementos de matriz

Al acceder a elementos individuales de una matriz, debe anteponer la variable con un signo de dólar ($) y luego agregar el índice del elemento dentro de los corchetes después del nombre de la variable. Por ejemplo

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

print "$days[0]n";
print "$days[1]n";
print "$days[2]n";
print "$days[6]n";
print "$days[-1]n";
print "$days[-7]n";

Esto producirá el siguiente resultado:

Mon
Tue
Wed
Sun
Sun
Mon

Los índices de matriz comienzan desde cero, por lo que para acceder al primer elemento, debe dar 0 como índices. También puede dar un índice negativo, en cuyo caso selecciona el elemento desde el final, en lugar del principio, de la matriz. Esto significa lo siguiente:

print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon

Matrices de números secuenciales

Perl ofrece un atajo para números y letras secuenciales. En lugar de escribir cada elemento al contar hasta 100, por ejemplo, podemos hacer algo como lo siguiente:

#!/usr/bin/perl

@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);

print "@var_10n";   # Prints number from 1 to 10
print "@var_20n";   # Prints number from 10 to 20
print "@var_abcn";  # Prints number from a to z

Aquí el doble punto (..) se llama operador de rango. Esto producirá el siguiente resultado:

1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z

Tamaño de matriz

El tamaño de una matriz se puede determinar utilizando el contexto escalar en la matriz; el valor devuelto será el número de elementos en la matriz.

@array = (1,2,3);
print "Size: ",scalar @array,"n";

El valor devuelto siempre será el tamaño físico de la matriz, no el número de elementos válidos. Puede demostrar esto, y la diferencia entre la matriz & commat; escalar y la matriz $ #, usando este fragmento es la siguiente:

#!/usr/bin/perl

@array = (1,2,3);
$array[50] = 4;

$size = @array;
$max_index = $#array;

print "Size:  $sizen";
print "Max Index: $max_indexn";

Esto producirá el siguiente resultado:

Size: 51
Max Index: 50

Solo hay cuatro elementos en la matriz que contienen información, pero la matriz tiene 51 elementos de largo, con un índice más alto de 50.

Agregar y eliminar elementos en una matriz

Perl proporciona una serie de funciones útiles para agregar y eliminar elementos en una matriz. Es posible que tenga una pregunta ¿qué es una función? Hasta ahora has usado impresión función para imprimir varios valores. De manera similar, hay varias otras funciones o, en ocasiones, llamadas subrutinas, que se pueden utilizar para varias otras funcionalidades.

No Señor. Tipos y descripción
1

pulsar & commat; ARRAY, LIST

Inserta los valores de la lista al final de la matriz.

2

pop & commat; ARRAY

Aparece y devuelve el último valor de la matriz.

3

shift & commat; ARRAY

Desplaza el primer valor de la matriz y lo devuelve, acortando la matriz en 1 y moviendo todo hacia abajo.

4

unshift & commat; ARRAY, LIST

Antepone la lista al principio de la matriz y devuelve el número de elementos de la nueva matriz.

#!/usr/bin/perl

# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. @coins  = @coinsn";

# add one element at the end of the array
push(@coins, "Penny");
print "2. @coins  = @coinsn";

# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. @coins  = @coinsn";

# remove one element from the last of the array.
pop(@coins);
print "4. @coins  = @coinsn";

# remove one element from the beginning of the array.
shift(@coins);
print "5. @coins  = @coinsn";

Esto producirá el siguiente resultado:

1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel

Rebanar elementos de matriz

También puede extraer una «porción» de una matriz, es decir, puede seleccionar más de un elemento de una matriz para producir otra matriz.

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3,4,5];

print "@weekdaysn";

Esto producirá el siguiente resultado:

Thu Fri Sat

La especificación de un segmento debe tener una lista de índices válidos, positivos o negativos, cada uno separado por una coma. Para mayor velocidad, también puede utilizar el .. operador de rango –

#!/usr/bin/perl

@days = qw/Mon Tue Wed Thu Fri Sat Sun/;

@weekdays = @days[3..5];

print "@weekdaysn";

Esto producirá el siguiente resultado:

Thu Fri Sat

Reemplazo de elementos de matriz

Ahora vamos a introducir una función más llamada empalme(), que tiene la siguiente sintaxis:

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]

Esta función eliminará los elementos de @ARRAY designados por OFFSET y LENGTH, y los reemplazará con LIST, si se especifica. Finalmente, devuelve los elementos eliminados de la matriz. A continuación se muestra el ejemplo:

#!/usr/bin/perl

@nums = (1..20);
print "Before - @numsn";

splice(@nums, 5, 5, 21..25); 
print "After - @numsn";

Esto producirá el siguiente resultado:

Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

Aquí, el reemplazo real comienza con el sexto número, después de eso, cinco elementos se reemplazan del 6 al 10 con los números 21, 22, 23, 24 y 25.

Transformar cadenas en matrices

Veamos una función más llamada separar(), que tiene la siguiente sintaxis:

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]

Esta función divide una cadena en una matriz de cadenas y la devuelve. Si se especifica LIMIT, se divide en como máximo ese número de campos. Si se omite PATTERN, se divide en espacios en blanco. A continuación se muestra el ejemplo:

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string);
@names  = split(',', $var_names);

print "$string[3]n";  # This will print Roses
print "$names[4]n";   # This will print Michael

Esto producirá el siguiente resultado:

Roses
Michael

Transformar matrices en cadenas

Podemos usar el entrar() función para volver a unir los elementos de la matriz y formar una cadena escalar larga. Esta función tiene la siguiente sintaxis:

join EXPR, LIST

Esta función une las cadenas separadas de LIST en una sola cadena con campos separados por el valor de EXPR y devuelve la cadena. A continuación se muestra el ejemplo:

#!/usr/bin/perl

# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";

# transform above strings into arrays.
@string = split('-', $var_string);
@names  = split(',', $var_names);

$string1 = join( '-', @string );
$string2 = join( ',', @names );

print "$string1n";
print "$string2n";

Esto producirá el siguiente resultado:

Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom

Ordenación de matrices

los clasificar() La función ordena cada elemento de una matriz de acuerdo con los estándares numéricos ASCII. Esta función tiene la siguiente sintaxis:

sort [ SUBROUTINE ] LIST

Esta función ordena la LISTA y devuelve el valor de la matriz ordenada. Si se especifica SUBROUTINE, se aplica la lógica especificada dentro de SUBTROUTINE mientras se clasifican los elementos.

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foodsn";

# sort this array
@foods = sort(@foods);
print "After: @foodsn";

Esto producirá el siguiente resultado:

Before: pizza steak chicken burgers
After: burgers chicken pizza steak

Tenga en cuenta que la clasificación se realiza según el valor numérico ASCII de las palabras. Entonces, la mejor opción es transformar primero cada elemento de la matriz en letras minúsculas y luego realizar la función de clasificación.

El $[ Special Variable

So far you have seen simple variable we defined in our programs and used them to store and print scalar and array values. Perl provides numerous special variables, which have their predefined meaning.

We have a special variable, which is written as $[. This special variable is a scalar containing the first index of all arrays. Because Perl arrays have zero-based indexing, $[ will almost always be 0. But if you set $[ to 1 then all your arrays will use on-based indexing. It is recommended not to use any other indexing other than zero. However, let’s take one example to show the usage of $[ variable −

#!/usr/bin/perl

# define an array
@foods = qw(pizza steak chicken burgers);
print "Foods: @foodsn";

# Let's reset first index of all the arrays.
$[ = 1;

print "Food at @foods[1]: $ alimentos[1] n "; imprimir" Alimentos en  & commat; alimentos[2]: $ alimentos[2]norte";

Esto producirá el siguiente resultado:

Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak

Fusionar matrices

Debido a que una matriz es solo una secuencia de valores separados por comas, puede combinarlos como se muestra a continuación:

#!/usr/bin/perl

@numbers = (1,3,(4,5,6));

print "numbers = @numbersn";

Esto producirá el siguiente resultado:

numbers = 1 3 4 5 6

Las matrices integradas simplemente se convierten en parte de la matriz principal como se muestra a continuación:

#!/usr/bin/perl

@odd = (1,3,5);
@even = (2, 4, 6);

@numbers = (@odd, @even);

print "numbers = @numbersn";

Esto producirá el siguiente resultado:

numbers = 1 3 5 2 4 6

Seleccionar elementos de listas

La notación de lista es idéntica a la de …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Método Java String join () – javatpoint

apple touch icon@2

Java – Unix time / epoch time: ¿Representación de fecha o bloque de tiempo?