Gå til innhold

Anbefalte innlegg

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 av oddkeir
Lenke til kommentar
Videoannonse
Annonse
  • 2 måneder senere...

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...