Question

Quelqu'un peut-il suggérer un bon module en perl pouvant être utilisé pour stocker une collection d'objets?

Ou bien ARRAY est-il un substitut suffisant pour la plupart des besoins?

Mise à jour: Je cherche une classe de collections parce que je veux pouvoir effectuer une opération telle que la propriété de calcul du niveau de collection de chaque élément.

Etant donné que je dois effectuer de nombreuses opérations de ce type, je pourrais aussi bien écrire une classe pouvant être étendue par des objets individuels. Cette classe fonctionnera évidemment avec les tableaux (ou peut-être des hachages).

Était-ce utile?

La solution

Il existe des modules de collection pour les structures plus complexes, mais il est courant en Perl d'utiliser des tableaux pour les tableaux, les piles et les listes. Perl a des fonctions intégrées pour utiliser le tableau en pile ou en liste: push / pop, shift / unshift, splice (insertion ou suppression au milieu) et le formulaire foreach pour l'itération.

Perl possède également une carte, appelée hashmap, qui est l'équivalent d'un dictionnaire en Python - vous permettant d'associer une clé unique à une valeur unique.

Les développeurs Perl composent souvent ces deux structures de données pour construire ce dont ils ont besoin - besoin de plusieurs valeurs? Stockez les références de tableau dans la partie valeur de la table de hachage (Map). Les arbres peuvent être construits de la même manière: si vous avez besoin de clés uniques, utilisez plusieurs niveaux de hashmaps ou si vous n'utilisez pas de références de tableau imbriquées.

Ces deux types de collection primitifs dans Perl ne possèdent pas d’API orientée objet, mais ils sont toujours des collections.

Si vous regardez sur CPAN, vous trouverez probablement des modules fournissant d'autres structures de données orientées objet, cela dépend vraiment de vos besoins. Avez-vous besoin d'une structure de données particulière en plus d'une liste, d'une pile ou d'une carte? Vous pourriez obtenir une réponse plus précise (par exemple, un module spécifique) si vous vous interrogez sur une structure de données particulière.

Vous avez oublié de mentionner, si vous recherchez des exemples de code de petite taille dans diverses langues, PLEAC (Exemples de langages de programmation similaires à Cookbook) est une ressource décente.

Autres conseils

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple,

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 { 

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple, <*>

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

->[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->{

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple, <*>

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

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

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple, <*>

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

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

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple, <*>

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

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

J'appuie le commentaire de Michael Carman: n'utilisez pas le terme "Hashmap". ou " carte " quand vous voulez dire un hachage ou un tableau associatif. Surtout quand Perl a une fonction map; cela confond juste les choses.

Cela étant dit, la réponse de Kyle Burton est fondamentalement valable: un hachage ou un tableau, ou une structure complexe composée d'un mélange des deux, suffit généralement. Perl appelle OO mais ne l'applique pas; il y a de fortes chances qu'une structure de données définie de manière lâche puisse suffire à vos besoins.

A défaut, veuillez définir plus précisément ce que vous entendez par "calculer la propriété du niveau de la collection à partir de chaque élément". Et gardez à l’esprit que Perl a des mots-clés tels que map et grep qui vous permettent de faire de la programmation fonctionnelle, par exemple, <*>

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

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

En lisant l'arrière-plan, cette transformation de Schwarztian fait trois choses:

3) Il faut une clé à $ record, passe par les SKU définies dans cette structure arbitraire et calcule le nombre total et la valeur totale des transactions. Il retourne un tableau anonyme contenant la clé, le nombre de transactions et la valeur totale.

2) Le bloc suivant prend un certain nombre de références de tableau et les trie a) tout d’abord en comparant la valeur totale, numériquement, par ordre décroissant; b) si les valeurs sont égales, en comparant le nombre de transactions, numériquement par ordre décroissant; et c) si cela échoue, en triant de manière alphabétique le nom associé à cette commande.

1) Enfin, nous prenons la clé pour $ record à partir de la structure de données triée et la renvoyons.

Il se peut que vous n'ayez pas besoin de configurer une classe séparée pour faire ce que vous voulez.

J'utiliserais normalement un @array ou un% hash.

Quelles fonctionnalités recherchez-vous qui ne sont pas fournies par ceux-là?

Basez votre décision sur la manière dont vous devez accéder aux objets. Si vous les placez sur un tableau, indexez-les dans, les séparant / les décalant, cela fonctionne, puis utilisez un tableau. Sinon, hachez-les à l'aide d'une clé ou organisez-les dans un arbre d'objets qui répond à vos besoins. Un hachage d'objets est un moyen très simple, puissant et hautement optimisé de faire les choses en Perl.

Etant donné que les tableaux Perl peuvent facilement être ajoutés, redimensionnés, triés, etc., ils conviennent à la plupart des "collections". Besoins. Dans les cas où vous avez besoin de quelque chose de plus avancé, un hash fera généralement l'affaire. Je ne vous recommanderais pas de rechercher un module de collecte tant que vous n'en avez pas besoin .

Un tableau ou un hachage peut stocker une collection d'objets. Une classe peut être préférable si vous souhaitez travailler avec la classe de certaines manières, mais vous devez nous dire comment les utiliser avant de pouvoir faire de bonnes recommandations.

Je voudrais coller avec un tableau ou un hachage.

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

et

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

source

Cela dépend beaucoup; il existe des modules Sparse Matrix , certaines formes de persistance , une nouveau style de OO , etc. La plupart des gens ne font que perldata , perllol , perldsc à répondre à leur problème spécifique avec une structure de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top