7
votes

Créer un hasch perl avec un tableau comme clé

Comment puis-je mettre un tableau (comme le tuple dans l'exemple suivant) dans un hachage dans Perl? XXX

J'ai essayé avec une référence de tableau, mais cela ne fonctionne pas. Comment puis-je le faire fonctionner? Je veux essentiellement dépliquer en faisant le hachage (entre autres avec cela).


6 commentaires

Vous devrez concevoir votre propre algorithme de hachage pour votre tableau, puis l'utiliser comme clé.


Pouvez-vous donner un exemple s'il vous plaît?


Ce n'est pas possible: toutes les clés doivent être des chaînes. Vous pouvez toutefois rejoindre les parties de la matrice pour former une clé avec un caractère que vous pouvez garantir n'apparaîtra pas dans les valeurs. Cela pourrait être un octet nul: $ h {rejoindre "\ x00", @a} = 1 .


@amon est une raison pour laquelle la syntaxe $ h {1,2,3} = 7; Printf ('% x', ORD) pour Split / \ W /, (KEYS% H) [0] Utilise 1C en tant que séparateur de clé?


@mpapec C'est une ancienne émulation multidimensionnelle de la matrice (d'avant qu'il y a eu des références dans la langue). Les éléments sont rejoints par $; pour former une clé. C'est pas d'être encouragé. Voir Perlvar pour une description.


@mpapec: C'est la valeur par défaut pour $; - le séparateur de l'indice. La valeur a été choisie car elle est identique à des utilisations AWK pour subsp . Lisez-y dans Perlvar .


3 Réponses :


11
votes

Les hachages régulières ne peuvent avoir que des clés de chaîne, vous devez donc créer une fonction de hachage pour vos tableaux. Un moyen simple serait de simplement Rejoindre vos éléments de matrice, par ex.

$h{pack('(j/a*)*', @a)} = \@a;


0 commentaires

4
votes

j'ai essayé avec une référence de tableau, mais cela ne fonctionne pas

drôle qui, page 361 du (nouveau) livre de chameau contient un titre de paragraphe: Les références ne fonctionnent pas comme touches de hasch

Alors oui, vous avez prouvé le bon livre de chameau. Il vous indique alors comment le réparer, en utilisant Cravate :: refhash .

Je suppose que vous devriez acheter le livre.

(Au fait, (1,1) pourrait être appelé un tuple dans Python, mais il s'appelle une liste à Perl).


0 commentaires

2
votes

Pour supprimer des doublons dans le tableau à l'aide de hachages: xxx

Vous pouvez utiliser mapper pour créer le hachage: xxx < / pré>


3 commentaires

-1: Ne répond pas à l'incapacité de l'OP d'utiliser une valeur non scalaire en tant que clé de hachage.


Je ne suis pas d'accord. Il traite de sa vraie question (à la fin de la poste) qui consiste à utiliser un hachage à déduire un tableau. Cela me suggère que ce qu'il tente de réaliser en définissant un tableau en tant que hashkey consiste à attribuer chacun des éléments de la matrice en tant que clé distincte du hachage.


Convenu qu'il montre comment dédénacer un ensemble de données à l'aide d'un hachage, mais ma lecture de la question est que les éléments de données de l'ensemble sont des tuples, et non des éléments de chaque tuple. Donc, s'il ne peut pas utiliser les tuples sous forme de touches, vous utilisez ensuite les touches sur déderdup n'est pas possible. Peut-être que OP peut clarifier ce qu'il est déduisant exactement?