Schrift
[thread]7174[/thread]

$#array aber wie bei hash?



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
mhybner
 2005-07-30 15:16
#56836 #56836
User since
2005-07-30
4 Artikel
BenutzerIn
[default_avatar]
hallo,

wie kann ich die anzahl der elemente von einem hash herausfinden? beim arrays ist es ja $#myarray.

wie mache ich das bei einem hash?

vielen dank
michael
dominicn
 2005-07-30 15:39
#56837 #56837
User since
2003-08-08
327 Artikel
BenutzerIn
[default_avatar]
$#myarray ist nicht die Anzahl der Elemente sondern der Index des letzten Elements. Im Normalfall ist die Anzahl also $#myarray+1 oder scalar @myarray

Beim Hash kann man es so machen:
scalar keys %hash

oder $#{[keys %i]}+1
mhybner
 2005-07-30 15:49
#56838 #56838
User since
2005-07-30
4 Artikel
BenutzerIn
[default_avatar]
ah vielen dank! aber wie mache ich das bei einer hash-referenz?

my $i = \%myhash;

$#{[keys %$i]}+1

klappt leider nicht?
pq
 2005-07-30 15:55
#56839 #56839
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
scalar keys %$hashref

den anderen ausdruck von dominicn solltest du erst mal vergessen, der war nicht ernst gemeint
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
[E|B]
 2005-07-30 16:11
#56840 #56840
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=mhybner,30.07.2005, 13:49]ah vielen dank! aber wie mache ich das bei einer hash-referenz?

my $i = \%myhash;

$#{[keys %$i]}+1

klappt leider nicht?[/quote]
Was klappt da denn nicht?
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]
esskar
 2005-07-30 16:24
#56841 #56841
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
(scalar %$hashref) / 2
Ishka
 2005-07-30 16:52
#56842 #56842
User since
2003-08-04
771 Artikel
HausmeisterIn
[Homepage] [default_avatar]
[quote=esskar,30.07.2005, 14:24]
Code: (dl )
(scalar %$hashref) / 2
[/quote]
nein, das klappt nicht. Im scalaren Kontext steht in Hashes nämlich drin, wie viele Buckets belegt sind und wieviele es gibt, also ,,zahl/zahl''. Damit gibt (scalar %$hashref) / 2 die Hälfte der Zahl der belegten Buckets zurück.

meintest du
Code: (dl )
($#{[%$i]}+1) / 2

? Das geht zwar, ist aber langsam, glaube ich.\n\n

<!--EDIT|Ishka|1122728076-->
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}
esskar
 2005-07-30 17:00
#56843 #56843
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ach, dann halt
Code: (dl )
(scalar(map {$_} %ENV)) / 2

;)
pq
 2005-07-30 17:46
#56844 #56844
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
0+keys %hash
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
mhybner
 2005-07-30 22:28
#56845 #56845
User since
2005-07-30
4 Artikel
BenutzerIn
[default_avatar]
[E|B
,30.07.2005, 14:11][quote=mhybner,30.07.2005, 13:49]ah vielen dank! aber wie mache ich das bei einer hash-referenz?

my $i = \%myhash;

$#{[keys %$i]}+1

klappt leider nicht?

Was klappt da denn nicht?[/quote]
Quote
Was klappt da denn nicht?


ups, klappt doch! ich hatte einen typo im hashnamen.

Vielen Dank noch mal allen & Grüße

Michael
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2005-07-30 15:16.