oddkeir Skrevet 5. november 2005 Del Skrevet 5. november 2005 (endret) Hei Finnest der en smart måte å telle antall $tekststring i en @array? Uten å måtte sette opp en avansert loop. (Jeg er nybegynner på Perl) F.eks: @array = ('himmelen er rød', 'blå fugl', 'grønn paprika', 'rød rose'); $tekststring = 'rød'; $countTotal = # antall ganger man finner denne $tekststring i @array ; # $countTotal = 2; Takk Endret 5. november 2005 av oddkeir Lenke til kommentar
tvangsgreie Skrevet 6. november 2005 Del Skrevet 6. november 2005 $countTotal = grep(/$tekststring/, @array); Lenke til kommentar
trtrtr Skrevet 25. januar 2006 Del Skrevet 25. januar 2006 Lagde for moro skyld en liten benchmark som sammenlignet "tvangsgreie" sin løsning med m//- og index løsning, siden jeg i det siste har nærmest gjenoppdaget index(), og dens evner. Overraskende var "tvangsgreie" sin løsning den klart raskeste, så mye som ~15-20+% raskere enn den nest raskeste, index-løsningen, som igjen var kun 1-3% raskere enn m//. Det ser dermed ut til å være skuffende lite å hente på å benytte index() istf m//, med mindre man kan få erstattet en "ikke helt triviell" regexp i m//. use Benchmark qw(:all :hireswallclock); use strict; use warnings; $| = 1; my @TestArray = (); for (0..10) { push @TestArray, "monkeyshit" x 1000; push @TestArray, "stikkogpiss"; push @TestArray, "monkeyshit" x 1000; } my $FindString = "monkeyshit"; my $r= timethese(1000_000, { P1 => q(FindWithIndex(\@TestArray, $Findstring); ), P2 => q(FindWithMatch(\@TestArray, $Findstring);), P3 => q(FindWithGrep(\@TestArray, $Findstring);), } ); cmpthese($r); sub FindWithMatch { my ($ArrayRef, $Findstring) = @_; my $Found = 0; for (@$ArrayRef) { $Found++ if (/$Findstring/); } } sub FindWithIndex { my ($ArrayRef, $FindString) = @_; my $Found = 0; for (@$ArrayRef) { $Found++ if (index ($_, $FindString) != -1); } } sub FindWithGrep { my ($ArrayRef, $Findstring) = @_; my $Found = grep(/$Findstring/, @$ArrayRef); } Rate P2 P1 P3 P2 410341/s -- -2% -15% P1 418235/s 2% -- -13% P3 481232/s 17% 15% -- Lenke til kommentar
___ Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 Hei Finnest der en smart måte å telle antall $tekststring i en @array? Uten å måtte sette opp en avansert loop. (Jeg er nybegynner på Perl) F.eks: @array = ('himmelen er rød', 'blå fugl', 'grønn paprika', 'rød rose'); $tekststring = 'rød'; $countTotal = # antall ganger man finner denne $tekststring i @array ; # $countTotal = 2; Takk 5107918[/snapback] $antall = @array + 0; Werner Lenke til kommentar
trtrtr Skrevet 26. januar 2006 Del Skrevet 26. januar 2006 men wernie, det gjør jo ikke jobben som op var ute etter.. Lenke til kommentar
___ Skrevet 29. januar 2006 Del Skrevet 29. januar 2006 men wernie, det gjør jo ikke jobben som op var ute etter.. 5501646[/snapback] Sorry, leste ikke hele spørsmålet Werner Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå