in reply to finding matches in the same array

@seq = ('acgt','actg','cggt','cggt','actg'); @num = ('1234','2345','3244','3455','5230'); Wrong algorithm #for( 0..$#seq ){ # $struct{$seq[$_]} ||= $num[$_]; # $struct{$seq[$_]} = ($struct{$seq[$_]}+$num[$_]) / 2 #}


Replies are listed 'Best First'.
Re^2: finding matches in the same array
by RazorbladeBidet (Friar) on Apr 13, 2005 at 17:35 UTC
    This gives more weight to the last number (if there are more than 2):
    my @sequence = ('acgt','actg','cggt','cggt', 'actg', 'actg'); my @numbers = ('1234','2345','3244','3455', '5230', '100000' );
    gives 51893.75 when it should be 34526.3333333333
    --------------
    "But what of all those sweet words you spoke in private?"
    "Oh that's just what we call pillow talk, baby, that's all."
      You are right, it's utterly different algorithm.
      The correct one is as follows:
      @seq = ('acgt','actg','cggt','cggt', 'actg', 'actg'); @num = ('1234','2345','3244','3455', '5230', '100000' ); for( 0..$#seq ){ $struct{$seq[$_]}->[0] += $num[$_] and $struct{$seq[$_]}->[1]++ } for( keys %struct ){ print "$_\t", $struct{$_}->[0] / $struct{$_}->[1], $/ } __END__ STDOUT: acgt 1234 cggt 3349.5 actg 35858.3333333333