Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: replacing order element in array

by kwaping (Priest)
on Apr 18, 2007 at 16:15 UTC ( #610792=note: print w/ replies, xml ) Need Help??


in reply to replacing order element in array

Here's my shot at it:

#!/usr/bin/perl use strict; use warnings; # set up srand; my @one = (1,2,3,4,5,6); my @two = (2,4,6,8,9,12); # the value that needs replacing my $bad = 4; # figure out where that value is in list one ### my $index = index(join('',@one),$bad); # <- bad code my $index = 0; my $found = 0; foreach my $item (@one) { if ($item == $bad) { $found++; last; } $index++; } die "The value '$bad' was not found in the list\n" unless ($found); # find elements of list two that aren't already in list one my $re = join('|',@one); my @candidates = grep(! /^(?:$re)$/, @two); # replace unwanted list one value with random selection from list two $one[$index] = $candidates[rand @candidates]; use Data::Dumper::Simple; print Dumper(@one); __END__ @one = ( 1, 2, 3, 8, 5, 6 );


Update: I realize that the line that generates $index is a potential point of failure via false positives (matching "10" when $bad = 1, for example). However, I've discussed this with the OP and he says it's not an issue, due to the fact that the values are all 4-digit numbers.

Update 2: The above statement no longer applies post-patch.

---
It's all fine and dandy until someone has to look at the code.


Comment on Re: replacing order element in array
Select or Download Code
Re^2: replacing order element in array
by Not_a_Number (Parson) on Apr 18, 2007 at 18:41 UTC
    ...he says it's not an issue, due to the fact that the values are all 4-digit numbers.

    But it is. Try it with these values to see:

    my @one = ( 1234, 5678, 9012 ); my @two = ( 1234, 7891, 9001, 9002 ); my $bad = 5678;

    Output:

    Use of uninitialized value in join or string at junk.pl line 21. 1234 5678 9012 9002

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://610792]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (22)
As of 2015-07-01 15:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (6 votes), past polls