Schrift
[thread]10771[/thread]

Doppelte Elemente aus Array entfernen

Leser: 4


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
pktm
 2007-11-11 14:12
#102195 #102195
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Ich habe da ein Array aus Hashes, und ich würde gerne duppelte Einträge entfernen.
Gibts dafür ein Rezept? Oder ein schmuckes Modul?

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2007-11-11 14:39
#102196 #102196
Alle einträge per traverse in ein hash einfügen,
doppelte einträge werden überschrieben.

mfg Dirk
pktm
 2007-11-11 23:03
#102218 #102218
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Und was soll ich als Schlüssel für den Hash nehmen? Meine Hashreferenz?
http://www.intergastro-service.de (mein erstes CMS :) )
Linuxer
 2007-11-11 23:59
#102219 #102219
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Wie umfangreich sind denn die enthaltenen Daten?

Ich hatte mal ein ähnliches Problem und da hab ich mir beholfen, in dem ich jeden enthaltenen Hash mittels Data::Dumper serialisiert habe und eine MD5-Summe davon erstellte; bei gleicher Summe wurde eine Hash-Referenz entfernt.

Man könnte auch einen Hash füllen und die MD5-Summe als Schlüssel einsetzen; als Wert wäre dann die Hash-Referenz zu nutzen.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
Gast Gast
 2007-11-12 00:08
#102220 #102220
pktm+2007-11-11 22:03:53--
Und was soll ich als Schlüssel für den Hash nehmen? Meine Hashreferenz?

Das kommt wohl ganz darauf an, wann genau Du zwei Hashes als "gleich" bzw "doppelt" bezeichnen willst. Willst Du nur exakt identische Hashes rauswerfen, die beide durch die gleiche Referenz angegeben sind?
betterworld
 2007-11-12 00:10
#102221 #102221
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Der Beitrag ueber mir ist auch von mir... hab mal wieder vergessen, mich anzumelden.

Was ich noch sagen wollte: Die Methode, alles in einen Hash zu werfen und damit Doppelte zu eliminieren, ist zwar oft sehr einfach zu schreiben, hat aber den Nebeneffekt, dass die Reihenfolge nicht erhalten bleibt.
moritz
 2007-11-12 00:21
#102223 #102223
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
renee
 2007-11-12 09:57
#102236 #102236
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
moritz+2007-11-11 23:21:31--
CPAN:List::MoreUtils::uniq


Das kann aber nur mit "Plain"-Elementen (keine Hashrefs) umgehen - wenn ich mich recht erinnere...
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/
pq
 2007-11-12 10:01
#102237 #102237
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
betterworld+2007-11-11 23:10:10--
Was ich noch sagen wollte: Die Methode, alles in einen Hash zu werfen und damit Doppelte zu eliminieren, ist zwar oft sehr einfach zu schreiben, hat aber den Nebeneffekt, dass die Reihenfolge nicht erhalten bleibt.

naja, wenn man die reihenfolge noch braucht, nimmt man die loesung aus perldoc -q duplicate.
Code (perl): (dl )
1
2
my %seen;
@array = grep { ! $seen{$_}++ } @array;

wobei man in dem fall von pktm an der stelle von $_ den serialisierten hash einsetzt.
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
pktm
 2007-11-12 11:09
#102243 #102243
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Gast+2007-11-11 23:08:49--
pktm+2007-11-11 22:03:53--
Und was soll ich als Schlüssel für den Hash nehmen? Meine Hashreferenz?

Das kommt wohl ganz darauf an, wann genau Du zwei Hashes als "gleich" bzw "doppelt" bezeichnen willst. Willst Du nur exakt identische Hashes rauswerfen, die beide durch die gleiche Referenz angegeben sind?


Nein, ich suche inhaltsgleiche Hashreferenzen, die (so glaube ich) zwangsläufig eine andere Speicheradresse besitzen, weill sie anonyme Hashes in einem Array sind. Hier ein Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
my @array = (
{a => 'b'},
{1 => 2},
{1 => 2},
);

my $uniques_aref = remove_dublicates(\@array);
# Sollte dann nur noch [{a => 'b'}, {1 => 2}] liefern.


Diese Mdoule werde ich mir heute einmal ansehen.
http://www.intergastro-service.de (mein erstes CMS :) )
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2007-11-11 14:12.