Schrift
[thread]6927[/thread]

identische hash-schlüssel???



<< |< 1 2 >| >> 13 Einträge, 2 Seiten
supersucker
 2005-04-25 18:54
#54202 #54202
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
hi zusammen,

hätte mal eine grundsätzliche frage:

warum ist es in perl nicht möglich, bei einem hash einträge mit identischen schlüsseln einzufügen?

ich stehe gerade vor einem problem was ich mit einem hash der identische schlüssel erlaubt schnell und sauber lösen könnte, da perl das anscheinend nicht kann, muss ich jetzt einen unschönen umweg gehen.

diese einschränkung ist mir auch überhaupt nicht klar, intern sind hashes ja wohl wahrscheinlich als hashtabellen implementiert, um in eine hashtabelle identische schlüssel einzufügen könnte man z.B. hashing mit linearer verkettung nehmen o.ä., ich empfinde es als ziemlichen nachteil wenn ich bei einem hash immer darauf achten muss das die schlüssel nicht identisch sind

hatte schon ein paarmal die notwendigkeit identische schlüssel verwenden zu müssen, hab das dann immer über umwege gelöst und so langsam nervt es mich......

gibt es eine möglichkeit perl dazu zu zwingen identische hash-schlüssel zu erlauben?

thx
Ronnie
 2005-04-25 18:59
#54203 #54203
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Wenn du sequentiell auf eine Menge zugreifen willst, warum nimmst du nicht ein Array (of Hashes)? Wenn du unbedingt zwei Werte zu einem Key habe willst kannst du auch als Value ein anonymes Array nehmen (Zugriff per push/pop)?!
pq
 2005-04-25 19:11
#54204 #54204
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
einfache gegenfrage: was erwartest du bei folgendem code?
$hash{key} = 23;
$hash{key} = 24;
print $hash{key};
\n\n

<!--EDIT|pq|1114441911-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
supersucker
 2005-04-25 19:43
#54205 #54205
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
@pq:

Quote
einfache gegenfrage: was erwartest du bei folgendem code?
$hash{key} = 23;
$hash{key} = 24;
print $hash{key};


ok, seh ich ein.........:-(

@Ronnie:

das problem was ich hab ist folgendes:

ich hab eine reihe von datensätzen als einzelne hashes in einem arrary
gespeichert, so weit so gut....
nun möchte ich diese einzelnen hash-datensätze innerhalb des array nach einem bestimmten numerischen prädikat absteigend sortieren, mit anderen worten jeder hash enthält neben anderen daten eine bestimmte zahl anhand derer ich die güte dieses datensatzes bemesse...
anhand dieser zahl möchte ich nun die hashes sortieren und mir dann die besten 10 ausgeben lassen, mit anderen worten die ersten 10 elemente des (nun sortierten) arrays....

ich hab nicht mal annähernd eine idee wie ich das machen, ich weiss nicht wie ich sort auf ein array of hashes anwende, ganz zu schweigen davon wie ich hashes innerhalb des arrays verschiebe usw...

hattet ihr schon mal ein ähnliches problem?
bin dankbar für jede hilfe........
renee
 2005-04-25 19:43
#54206 #54206
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
So umständlich ist der Weg auch nicht... Mach als Wert eines Keys einfach ein anonymes Array oder einen Hash...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
supersucker
 2005-04-25 19:57
#54207 #54207
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
Quote
So umständlich ist der Weg auch nicht... Mach als Wert eines Keys einfach ein anonymes Array oder einen Hash...


Eben!
aber genau das ist ja das problem was ich weiter oben gepostet habe bzw. warum ich diesen thread angefangen habe....

diese kennzahlen nach denen ich sortieren will können nämlich auch identisch sein....

oder meintest du damit, dass jede array-zelle einen hash enthält, der als key eben diese kennzahl enthält und als value einen weiteren hash in dem die restlichen werte des datensatzes stehen?

wenn ja, wüsste ich immer noch nicht wie ich das sortieren kann bzw. wie ich dann die elemente innerhalb des arrays verschieben kann........

noch irgendwelche ideen?
danke für die hilfe soweit!
Taulmarill
 2005-04-25 20:03
#54208 #54208
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wenn du werte nach folgendem schema (ungetestet) hinzufügst, solltest du alle werte (auch doppelte) in jeden beliebigen hashkey schieben können (auch identische):
Code: (dl )
push @{$hash{$key}}, $value;

lese perldoc perldsc\n\n

<!--EDIT|Taulmarill|1114445202-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Ronnie
 2005-04-25 20:21
#54209 #54209
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ich dachte an ein solches Konstrukt:
Code: (dl )
1
2
3
4
my $hoa = {
'key1' => [ {score => '10'}, {user => 'User1', data => 'xyz'}, ],
'key2' => [ {score => '17'}, {user => 'User5', data => 'xyz'}, ]
};
supersucker
 2005-04-25 23:29
#54210 #54210
User since
2005-03-17
118 Artikel
BenutzerIn
[default_avatar]
also vielen dank erstmal für die antworten,
aber ich habs jetzt per hand gemacht, also sortiers eben selber.....

ich hatte ähnliche speicherkonstrukte wie vorgeschlagen gehabt, das dumme nur daran ist, dass ich damit halt eben nicht sortieren kann, was eigentlich so das wichtigste an der sache war........aber naja, jetzt passts ja, sieht halt nicht gerade ästethisch aus.......:-)

@pq:
Mit:

Quote
einfache gegenfrage: was erwartest du bei folgendem code?
$hash{key} = 23;
$hash{key} = 24;
print $hash{key};


hast ja recht, aber ich hatte das problem mittlerweile schon öfter das ich identische schlüssel gebraucht hätte ohne mir da erst ein komplexes speicherkonstrukt zu überlegen, kann mir nicht vorstellen das ich da der einzige bin....und bei obigem beispiel könnte sowas
wie
Quote
print $hash{key};

bei mehreren identischen schlüsseln auch eine liste zurückgeben (kann man ja je nach kontext vorher kucken ob man ne liste oder ein skalar zurückkriegt....)

ich persönlich fänds praktisch...

naja, wie auch immer, danke für die hilfe und noch nen netten montag abend..........
pKai
 2005-04-26 00:55
#54211 #54211
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
[quote=supersucker,25.April.2005, 21:29]ich hatte ähnliche speicherkonstrukte wie vorgeschlagen gehabt, das dumme nur daran ist, dass ich damit halt eben nicht sortieren kann, ...[/quote]Du kannst natürlich sortieren!
Der Witz mit dem sortieren in Perl ist doch, dass du die Sortierfunktion "beliebig" angeben kannst.
perldoc -f sort ist vielleicht nicht umbedingt die Erleuchtung in der Beziehung aber die Grundlage.
Um z. B. von Ronnies %{$hoa} die keys gemäß dem score zu sortieren, machst du:
Code: (dl )
@keyscore = sort {$hoa{$a}->[0]->{'score'} <=> $hoa{$b}->[0]->{'score'}} keys %{$hoa}
I sense a soul in search of answers.
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2005-04-25 18:54.