Pregunta

¿Alguien puede sugerir un buen módulo en perl que pueda usarse para almacenar una colección de objetos?

¿O es ARRAY un sustituto suficientemente bueno para la mayoría de las necesidades?

Actualización: Estoy buscando una clase de colecciones porque quiero poder realizar una operación como la propiedad de nivel de colección de cómputo desde cada elemento.

Dado que necesito realizar muchas de estas operaciones, también podría escribir una clase que pueda extenderse por objetos individuales. Esta clase obviamente funcionará con matrices (o pueden ser hashes).

¿Fue útil?

Solución

Hay módulos de recopilación para estructuras más complejas, pero es un estilo común en Perl usar Arrays para arreglos, pilas y listas. Perl ha incorporado funciones para usar la matriz como una pila o lista: push / pop, shift / unshift, empalme (inserción o eliminación en el medio) y la forma foreach para la iteración.

Perl también tiene un mapa, llamado hashmap que es equivalente a un Diccionario en Python, lo que le permite tener una asociación entre una sola clave y un solo valor.

Los desarrolladores de Perl a menudo componen estas dos estructuras de datos para construir lo que necesitan: ¿necesitan varios valores? Almacene las referencias de matriz en la parte de valor de la tabla hash (Mapa). Los árboles se pueden construir de una manera similar: si necesita claves únicas, use múltiples niveles de hashmaps o si no usa referencias de matriz anidadas.

Estos dos tipos de colección primitivos en Perl no tienen una API orientada a objetos, pero aún son colecciones.

Si observa CPAN, es probable que encuentre módulos que proporcionen otras estructuras de datos orientadas a objetos, realmente depende de su necesidad. ¿Hay una estructura de datos particular que necesite además de una Lista, Pila o Mapa? Podría obtener una respuesta más precisa (por ejemplo, un módulo específico) si está preguntando acerca de una estructura de datos en particular.

Olvidó mencionar, si está buscando ejemplos de código pequeño en una variedad de idiomas, PLEAC (Ejemplos de lenguaje de programación similar a un libro de cocina) es un recurso decente.

Otros consejos

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

my $record = get_complex_structure();
# $record = {
#    'widgets' => {
#        name => 'ACME Widgets',
#        skus => [ 'WIDG01', 'WIDG02', 'WIDG03' ],
#        sales => {
#            WIDG01 => { num => 25, value => 105.24 },
#            WIDG02 => { num => 10, value => 80.02 },
#            WIDG03 => { num => 8,  value => 205.80 },
#        },
#    },
#    ### and so on for 'grommets', 'nuts', 'bolts' etc.
# }

my @standouts =
    map { 

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

<*>

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

->[0] } sort { $b->[2] <=> $a->[2] || $b->[1] <=> $a->[1] || $record->{$a->[0]}->{name} cmp $record->{$b->[0]}->{name} } map { my ($num, $value); for my $sku (@{$record->{

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

<*>

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

}{skus}}) { $num += $record->{

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

<*>

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

}{sales}{$sku}{num}; $value += $record->{

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

<*>

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

}{sales}{$sku}{value}; } [

Respaldaré el comentario de Michael Carman: no utilice el término " Hashmap " o " mapa " Cuando te refieres a un hash o array asociativo. Especialmente cuando Perl tiene una función de mapa; Eso solo confunde las cosas.

Habiendo dicho eso, la respuesta de Kyle Burton es fundamentalmente sólida: un hash o una matriz, o una estructura compleja compuesta de una mezcla de los dos, suele ser suficiente. Perl gruñe OO, pero no lo hace cumplir; lo más probable es que una estructura de datos poco definida sea lo suficientemente buena para lo que necesita.

Si falla esto, defina más exactamente lo que quiere decir con " compute la propiedad de nivel de cada elemento " ;. Y tenga en cuenta que Perl tiene palabras clave como map y grep que le permiten realizar tareas de programación funcional como, por ejemplo,

<*>

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

, $num, $value ]; } keys %$record;

Leyendo de atrás hacia delante, esta transformada de Schwarztian en particular hace tres cosas:

3) Se necesita una clave para registrar $, pasa por los SKU definidos en esta estructura arbitraria y calcula el número agregado y el valor total de las transacciones. Devuelve una matriz anónima que contiene la clave, el número de transacciones y el valor total.

2) El siguiente bloque toma una serie de referencias de matriz y las clasifica a) en primer lugar, comparando numéricamente el valor total, en órdenes descendentes; b) si los valores son iguales, comparando el número de transacciones, numéricamente en orden descendente; y c) si eso falla, clasificando asciibéticamente en el nombre asociado con este orden.

1) Finalmente, tomamos la clave a $ record de la estructura de datos ordenada, y la devolvemos.

Es posible que no necesite configurar una clase separada para hacer lo que quiere.

Normalmente usaría un @array o un% hash.

¿Qué funciones estás buscando que no son proporcionadas por ellas?

Base su decisión en cómo necesita acceder a los objetos. Si los empuja a una matriz, los indexa, los hace estallar / desplazando para que funcionen, luego use una matriz. De lo contrario, colóquelos con alguna tecla u organícelos en un árbol de objetos que satisfaga sus necesidades. Un hash de objetos es una forma muy sencilla, potente y altamente optimizada de hacer las cosas en Perl.

Dado que las matrices de Perl se pueden agregar, cambiar de tamaño, clasificar, etc. fácilmente, son lo suficientemente buenas para la mayoría de las "colecciones" necesariamente. En los casos en que necesite algo más avanzado, un hash generalmente lo hará. No recomendaría que vaya a buscar un módulo de recopilación hasta que realmente lo necesite .

Una matriz o un hash puede almacenar una colección de objetos. Una clase podría ser mejor si desea trabajar con la clase de ciertas maneras, pero tendría que decirnos cuáles son esas formas antes de que podamos hacer buenas recomendaciones.

me quedaría con un ARRAY o un HASH.

 @names = ('Paul','Michael','Jessica','Megan');

y

my %petsounds = ("cat" => "meow",
             "dog" => "woof",
             "snake" => "hiss");

fuente

Depende mucho; hay módulos de Sparse Matrix , algunas formas de persistence , a nuevo estilo de OO etc. La mayoría de la gente simplemente escribe perldata , perllol , perldsc para responda su problema específico con una estructura de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top