|
|||||||||||||||||||||||||||
Thomas Kammer Have wrote:
> Halløj.
>
> Jeg er rimeligt grøn i perl:
>
> 1) Jeg vil gerne sortere en hash efter values. Det kan man jo ikke så jeg
> har tænkt mig at bruge en array[i]=key og så sortere arrayen så hash{key}
> er voksende for i voksende (er det helt sort?:) Derfor vil jeg gerne lave
> en sub-routine der kan tage en hash og en array som argument. Men alt
> synes at blive klappet sammen i @_ så hvordan gøres det?
sådan her f.eks.
sub foo(sslug@sslug){
my $arrayref = shift;
my $hashref = shift;
print "Array:\n";
for($i = 0; $i < @$arrayref; $i++){
print "$i => $$arrayref[$i]\n";
}
print "Hash:\n";
foreach $key (keys %$hashref){
print "$key => $$hashref{$key}\n";
}
}
@b = qw(a b c);
%c = (a => 1, b => 2, c => 3);
foo(@b, %c);
# end script
Output af script:
Array:
0 => a
1 => b
2 => c
Hash:
a => 1
b => 2
c => 3
> Eller er der en
> smartere måde at 'sortere' hashen.
Peters metode er den gængse hvis man vil tilgå nøglerne i en eller anden
speciel rækkefølge. Vil du tilgå værdierne i en bestemt rækkefølge, så kan
du gøre sådan her:
foreach $key (sort {$h{$a} <=> $h{$b}} keys %h) {
print "$key => $c{$key}\n";
# eller push @array, $h{$key} som vist nok var det du ville
}
> 2) Jeg vil gerne lave et regexp der matcher en eller flere spaces, men
> ikke hvis den/de optræder imellem to anførselstegn af typen ". Hvordan
> kan det gøres?
Det er svært, hvor meget af strengen '" " " "' skal f.eks.
matches?
Vi kommer nok ikke uden at der skal lidt mere end en enkelt regex til.
Mvh. Christian Hemmingsen
|
||||||||||||||
|
||||||||||||||