Doppelte Werte aus array entfernen

Hallo,

ich habe ein Problem mit dem ich nicht so recht weiterkomme.

Ich lese aus einer Datei mehrere tausend Telefonnummern in ein Array ein.

Aus diesem Array sollen doppelte Werte und leere Werte entfernt werden, aber gleichzeitig soll festgehalten werden, welche Werte doppelt enthalten sind.

Ich habe dafuer zwar ein funktionierendes Script, aber es ist ein riesiger Aufwand, vor allem wenn man bedenkt, dass es sich um ein paar tausend Daten handelt und um das Ziel zu erreichen mehrere Arrays mit den gleichen Daten gefuellt werden muessen (bei sort muss lt Beschreib8ung immer ein neues Array verwendet werden)

Hier mal mein script. Ich habe es auf der Konsole ausgefuehrt und lasse mir die Ergebniss nach der Operation anzeigen, damit ich weiss, ob alles klappt.

Ich denke es muesste fuer dieses Script eine Optimierung geben, die mir als Non-perl-profi aber nicht einfaellt.
Hat jemand Optimierrungsvorschlaege?
Mich stoert vor allem, dass ich bei grossen Datenmenegen (z.B. 10.000) mehrere Arrays mit den gleichen Daten habe, was ja irgendwo auch unnoetigen Speicherplatz verbraucht.

Hier mein Script:

#!/usr/bin/perl

use strict;
use warnings;

# Daten einlesen
my @Zeilen = ('49721509666000','17024470924','4918059701116000','491771784144','17078850469','49721509666000','','284765769609','','17024470924','49721509666000');

# Sortieren und zur Pruefung auf Console ausgeben
my @neuzeilen1 = sort(@Zeilen); 

# Doppelte in separates Atrray einstellen und im Hauptarray leeren
my $oldwert = '';
my @doppelte;
for(my $iiz=0;$iiz

Also wie gesagt: Das Script funktioniert. Es geht nur um die Optimierung von Speicherplatz und Rechenleistung bei grossen Mengen

Chris

Hallo Chris,

das geht einfach über einen Hash und die Listen-Elemente werden zu den Keys:

my %test;
foreach my $zeile (@Zeilen){
if(length($zeile) \> 1 ){$test{$zeile}++;}
}

my @Zeilen\_ohne = keys %test;
foreach my $zeile (@Zeilen\_ohne){
 print $zeile . " ist " . $test{$zeile} . " mal vorgekommen\n";
}

den Hash kannst Du auch gleich bei Einlesen der Datei füllen:

open FILE, "Filename" or die ;
while( ) {
chomp($\_);
$test{$\_}++;
}
close FILE;

mfg
Klaus

Super - Danke!

Da waere ich nie drauf gekommen!

Habe alles eingebaut und es funktioniert wirklich einwandfrei!

Chris