Listas y matricesUnas pocas opciones más de Perl debe estar cubierto antes de que los programas más interesantes se pueden escribir. "Primero, necesitamos listas de Perl" (o "matrices"). Una lista de Perl es como una matriz dinámica de clases en C + + o Java (java.util.Vector por ejemplo). Listas no utilizar la sintaxis de objetos de Perl, pero la lista es básicamente un objeto que posee los datos y que tiene un grupo de asociados de funciones. Una lista de Perl:
Posee una colección de elementos de datos (por lo general los valores escalares, pero usted puede crear listas de listas y otras estructuras más complejas como se explica en el perldsc. ¿Tiene (OK, "ha hecho a él", ya que estos no son funciones de miembro de la clase): - Crear una lista, por lo general de inicialización con un conjunto no vacío de elementos de datos (aunque las listas de vacío están bien). - Añadir elementos "al frente" o "al final" de la lista. - Eliminar elementos "al frente" o "al final" de las listas. - Elementos de acceso en posiciones específicas (esta característica le da 'array' conductas similares, así como comportamientos de la lista). - Devuelve el tamaño de su colección (longitud de la matriz dinámica). - Copia en otra matriz. Otras funciones relacionadas con las listas incluyen funciones para la clasificación de las listas y para el retorno de las copias de las listas con los elementos en orden inverso. Las listas son designados mediante el '@' calificador de tipo. Sus nombres siguen las convenciones habituales - Letra seguida de caracteres alfanuméricos (y algunos otros caracteres en los nombres de las listas especiales ofrecidos en el núcleo de Perl). Cuando los nombres de la formación, Perl considera que el carácter de subrayado como una carta. Lista de nombres válidos son: @ @ mylist resultados inputlines @ @ @ _data list_1 Perl mantiene diferentes "espacios de nombres" para escalar sus diferentes tipos y la lista de hash de datos (y otros tipos como "identificadores de archivo). Usted puede tener un resultado escalar $ @ y una lista de resultados sin causar cualquier tipo de confusión Perl (aunque puede molestar a un programador de mantenimiento sin experiencia que tiene que cuidar de su código). Lista de literales son compatibles: (1, 2, 3) ( "Tom", "Dick", "Harry", "Sue") ($ nombre, dirección, $ ciudad) Lista de los literales a menudo se utiliza para inicializar las matrices. Otro uso tiene la lista literal como un "valor-I '(algo en el lado izquierdo de una sentencia de asignación). Este uso se ilustrará más adelante, es una característica de conveniencia en relación con la extracción de los elementos específicos de una lista existente. Algunos ejemplos de los literales de la lista se utiliza en la lista / la creación de la matriz son los siguientes: @ PlacesIveBeen = (); # he estado en ninguna parte todavía - así, una lista vacía @ GradePts = (45, 50, 65, 75, 85); @ Ciudades = ( "London", "París", "Nueva York" , "Roma", "Tokyo", "Sydney"); @ personas = ( "Tom", "Dick", "Harry", "Sue"); @ TeenYears = (13 .. 19); La última de estas ilustra Perl '..' operador de rango. Esta es una manera corta de la definición de la colección, (13, 14, 15, 16, 17, 18, 19). Rango de operadores puede ser utilizado en 'foreach' iterativo construye - por (1 .. 100); bucles foreach se explican más adelante en este artículo. Dado que es común a la necesidad de inicializar una lista de palabras, Perl tiene una función auxiliar qw () . Por lo tanto, usted podría tener: People @ = qw (Tom Dick Harry Sue); El qw () no siempre es adecuada. El uso siguientes: @ = Qw ciudades de Nueva York '(Londres, París, Roma, Tokio, Sydney); resultados en una lista como: (Londres, París, 'Nueva York', Roma, Tokio, Sydney), que es probable que no se quiso decir. El fragmento de código siguiente se muestra la creación y el uso de algunas listas. Los bucles ilustran diferentes maneras de acceder a los elementos de la lista: @ Cities1 = ( "London", "París", "Nueva York"); # una lista con 3 elementos @ Cities2 = qw Los (Roma 'Ángeles "San Francisco"), de elementos # 5! @ Cities3 = ( "Wagga "," Hay "," Cooma "); # como QQ () y Q (), qw () permite a otros delimitadores: @ Cities4 = qw \ Thiroul Bellambi Keiraville \;" imprimir Cities1: \ n ", $ size = @ Cities1; for ($ i = 0; $ i <$ size; $ i + +) (print Cities1 [$ i], "\ n";) print "Cities1: \ n"; foreach $ ciudad (@ Cities2) (print ciudad $, "\ n";) print "Cities3: \ n"; foreach $ i (0 .. $ # Cities3) (print $ i Cities3 [$], "\ n";) print "Cities4: @ Cities4 \ n "; print @ Cities4; La línea de $ size = @ Cities1; ilustra el uso de una matriz en un «contexto escalar '; Perl interpreta esto como una solicitud de la longitud de la matriz, de modo que $ size toma el valor 3. El primer bucle for es un bucle de conteo convencional, con el índice de bucle utilizado para indexar en la colección de Cities1 @. Tenga en cuenta el uso de $ ciudades [$ i]; aquí el tipo de datos es un escalar - estamos extrayendo un elemento de datos a partir de la posición especificada en la colección. El segundo y tercer ciclos, son ejemplos de bucle foreach de Perl construir. Estos lazos tienen la forma: foreach (La palabra clave formay utilizarse en lugar de foreach, pero foreach es más legible.) Usualmente se desea una variable que hace referencia al elemento actual de la lista, pero esto no es esencial. El primero de los bucles foreach en el código de ejemplo sólo tiene acceso a cada uno de las (cinco!) elementos en $ Cities2, imprimiendo el nombre de cada uno, a su vez. El segundo es más como un recuento de bucle, la expresión $ # Cities3 devuelve el (escalar), valor que es el índice del último elemento de la lista @ Cities3. En consecuencia, este circuito es realmente foreach $ i (0, 1, 2) (... ); Este ciclo vuelve a utilizar la indexación estilo matriz para extraer elementos de los datos de la lista. Por último, la lista de $ Cities4 se imprime dos veces. La declaración tiene la impresión de la primera lista interpolados en una cadena, lo que imprime los elementos separados por espacios. Los resultados de la declaración final de impresión en una línea de datos con todos los elementos concatenados en una cadena larga (no es una forma particularmente útil de la producción, otra característica del sistema de Perl). Las listas pueden ser concatenados: @ Hombre = qw (Mickey, Donald); @ Hombre = qw (Minnie Daisy); @ DisneyMob = (@ hombre, @ Mujer, "Pluto"); Esto produce una sola lista de nivel (no es un Lisp lista de listas): Mickey, Donald, Minnie, Daisy, Pluto matrices pueden ser 'cortado' para dar subarreglos: @ line = qw (uno dos tres cuatro); firsttwo = @ @ línea [0,1]; @ línea [0,1] = ( "cinco", "seis"); o pueden tener valores empujó y se metió: @ pila = (); push (@ pila, "uno"); push (@ pila, "dos"); push (@ pila, 3, 4); push (@ pila, 5, 6, 7, 8, " nueve ", 101); print @ pila," \ n ", $ val = pop (@ pila); print" @ pila \ n "; (trabajo por turnos y unshift de una manera similar, que operan en el comienzo y no el final de una lista. Puede combinar empujando y desplazando etc para lograr algo así como una doble punta de cola.) La función inversa devuelve una copia de la lista con los elementos en orden inverso. De forma predeterminada, la función de clasificación utiliza una ordenación alfabética, el tratamiento de todos los elementos de la lista en forma de cadenas, de nuevo, devuelve una lista nueva. @ newRevList = reverse (@ aList); @ list1 = qw (Esta es una prueba de qué otra cosa Hola Mundo Hola mamá, etc, etc); # imprime como: List1: Esta es una prueba de qué otra cosa Hola Mundo Hola mamá, etc etc # tipo Peform, lista a continuación, imprima ordenados; letras mayúsculas ocupan la posición # menor que las minúsculas ... Ordenar: Hola Hola de este mundo un sitio, etc etc es prueba de lo que mamá # Algunos datos numéricos @ list2 = (100, 26, 3, 49, -11 , 3001, 78); # Ordenar! (En orden alfabético) Ordenar: -11 100 26 3 3001 49 78 El comportamiento por defecto de tipo lista alfabética de ordenación puede ser modificado, usted tiene que proporcionar su propia subrutina tipo de ayuda. Las funciones de ayuda para la clasificación son un poco atípico de rutinas definidas por el usuario, pero no son difíciles de escribir. Su rutina será llamado a devolver el resultado de una operación de comparación de dos elementos de la matriz - estos elementos han sido colocados en las variables globales $ a y $ b antes de la llamada a la subrutina. (Este uso de determinadas variables globales es lo que hace que estas subrutinas tipo diferente de otro programador rutinas definidas.) El código siguiente ilustra la definición y el uso de una subrutina tipo de ayuda 'numeric_sort. #! / share / bin / perl-numeric_sort sub w (if ($ a <$ b) (return -1;) elsif ($ a == $ b) (return 0;) else (return 1;)) @ list2 = (100, 26, 3, 49, -11, 3001, 78); @ slist2 sort = @ list2; print "Lista2 @ list2 \ n"; "imprimir Ordenada Lista2 (por defecto especie) @ slist2 \ n"; @ nlist2 = @ numeric_sort tipo list2; print "Ordenar Lista2 (tipo numérico) @ nlist2 \ n"; Perl tiene un especial <=> operador para comparaciones numéricas, usando este operador, la función de tipo numérico podría simplificarse: numeric_sort sub (@ a <=> $ b) Perl permite en-línea de definición de las funciones de ayudante de clase, permitiendo que las construcciones, tales como: @ nlist2 sort = ($ a <=> $ b) @ list2; un artículo presentado por Sarah Miller Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito. Importante: Este artículo "Las listas y las matrices" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.
|
|||||
| Online: 474 users browsing the articles directory |
|
|