Schrift
[thread]5670[/thread]

einmalige Werte in einen Array

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
jan10001
 2003-08-30 15:10
#81472 #81472
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Ich möchte ein Array nur mit verschieden Werten füllen, also in dem Array dürfen keine gleichen Werte enthalten sein. Gibt es da in Perl ne Methode dafür, die so etwas schnell erledigt? Ansonsten müsste ich jedes Array Element zuerst mit der Eingabe vergleichen.
jan
 2003-08-30 15:13
#81473 #81473
User since
2003-08-04
2536 Artikel
ModeratorIn
[Homepage] [default_avatar]
pack's in einen hash. wenn du unbedingt einen array brauchst, hol dir die schlüssel danach in einen array.
format_c
 2003-08-30 15:21
#81474 #81474
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Code (perl): (dl )
1
2
3
my %seen;
undef @seen{@array};
@array = keys %seen;
jan10001
 2003-08-30 21:05
#81475 #81475
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Ich gebs zu, hier versteh ich nur noch Bahnhof. Was haben Hashs damit zu tun? (Mit Hashs kenne ich mich nicht so gut aus.)

Auf ein Array kann ich verzichten, die Werte werden über ne Datenbank geliefert und ich mich recht entsinne geht das wohl auch mit einen Hash. (Allerdings, siehe oben.)

Grüße,
Jan
pq
 2003-08-30 21:12
#81476 #81476
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=jan10001,30.08.2003, 19:05]Ich gebs zu, hier versteh ich nur noch Bahnhof. Was haben Hashs damit zu tun?[/quote]
Hashes haben damit eine ganze menge zu tun, sie sind nämlich die antwort
auf deine frage...
ansonsten musst du wirklich jedes neue element mit allen schon vorhandenen
elementen vergleichen, um duplikate zu vermeiden. ein hash nimmt dir das
alles ab.
siehe die perldoc-FAQ dazu (die hatte doch schon mal jemand genannt, oder?)

Edit: perldoc -q duplicate (<!--pod1--><a href="//www.perldoc.com/perl5.8.0/pod/perlfaq4.html" target="_blank">perldoc <!--pod2-->perlfaq4<!--pod3--></a><!--pod4-->)\n\n

<!--EDIT|pq|1062263668-->
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
jan10001
 2003-08-30 22:27
#81477 #81477
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Quote
perldoc -q duplicate (perldoc perlfaq4)

Werde es mir gleich mal anschauen.
[E|B]
 2003-08-30 22:35
#81478 #81478
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Kann mir bitte jemand erklären, wieso es "@seen{@array};" heißen muss, statt "%seen{@array};"?!
Das versteh ich nicht ganz...
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
Strat
 2003-08-30 23:14
#81479 #81479
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[E|B
,30.08.2003, 20:35]Kann mir bitte jemand erklären, wieso es "@seen{@array};" heißen muss, statt "%seen{@array};"?!
Das versteh ich nicht ganz...

Wenn du so fragst: Die Logik dahinter verstehe ich auch nicht 100%. Das nennt man Hashslices, und die geben eine Liste von den Werten zu einigen Keys zurueck (z.B. @hash{'key1', 'key2'}; oder @hash{ @keylist }; ). Ich vermute, es ist so, weil da eine Liste herauskommt
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Ishka
 2003-08-31 18:12
#81480 #81480
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Bei Perl6 wird es angeblich so werden, daß man schreiben muß %hash{@keys}. Allerdings wird man auch schreiben %hash{$key}. Und in dem Zusammenhang hab ich gelesen, daß es jetzt so gemacht ist, daß man schreibt, was für ein Rückgabetyp es hat - und bei Perl6 was für ein Variablentyp es ist.
Aber nachdem man jetzt schreibt $hash{$key} ist es auch sinnvoll (um konsistent zu bleiben) zu schreiben @hash{@keys}
sub z{if(@_){1while$x[$k=rand 10];t($t=$x[$k]=1)}print map"$z[$x[$_]]$_".($_%3?
"":"\n"),1..9}sub t{$j=0;$x[$_+1]==$t&&($j+=2**$_)for 0..8;z,die"Gewinner $z[$t]
"if grep$_==($j&$_),7,56,73,84,146,273,292,448;z,die"Gleichstand\n"if@x>9&&!grep
!$_,@x}@x=4;@z=qw{. [ (};z$^T&1;while(<>){next if$_>9||$x[$_];t$t=$x[$_]=2;z 1}
Shagreen
 2003-08-31 19:21
#81481 #81481
User since
2003-08-14
88 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=jan10001,30.08.2003, 19:05]...
Auf ein Array kann ich verzichten, die Werte werden über ne Datenbank geliefert ...[/quote]
Vielleicht kannst Du schon in der SQL-Abfrage doppelte Werte abfangen.
[sql]SELECT DISTINCT spalte
FROM tabelle[/sql]
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2003-08-30 15:10.