Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re: Re: Finding missing elements in a sequence (code)

by clemburg (Curate)
on Nov 06, 2001 at 21:32 UTC ( [id://123629]=note: print w/replies, xml ) Need Help??


in reply to Re: Finding missing elements in a sequence (code)
in thread Finding missing elements in a sequence (code)

Ah, I see.

Well, you need to make things equal before comparing them ... you are putting numbers 1..n as keys into %isthere, but try to get out $isthere{"00001"}. That will not work - the keys in %isthere are "1" etc.

This is what you need to make it work:

$isthere{$_} = "yes" for map {$_+0} @list;

Christian Lemburg
Brainbench MVP for Perl
http://www.brainbench.com

Replies are listed 'Best First'.
Re: Re: Re: Finding missing elements in a sequence (code)
by pike (Monk) on Nov 06, 2001 at 21:47 UTC
    Or else you might change what you put into the hash:

    my %isthere = map { sprintf ('%05d',$_) => 0 } ($low..$high);
    Assuming that all numbers you want to check are in the same format...

    pike

Re: Re: Re: Finding missing elements in a sequence (code)
by deprecated (Priest) on Nov 06, 2001 at 21:38 UTC
    Wonderful! This works. Can you please go into a little more detail as to how this works? I am not sure how:
    "00010" + 0
    DWIM's.

    brother dep

    --
    Laziness, Impatience, Hubris, and Generosity.

      Adding 0 to the string "00001" forces the string to be interpreted as a number.

      In your code, when you say:

      my %isthere = map { $_ => 0 } ($low..$high);

      You force "00001" to be treated as a number, too. What *is* interesting is *why* "00001" is treated as a number, since there is also the possibility of doing "aaa" ... "zzz" and having it work, too. So why does "00001" end up being treated as "1" by the ".." operator? Probably the perl interpreter looks at your $low and $high and decides they look like numbers.

      BTW, you should not do this $low .. $high stuff - it can hang you badly if $low and $high end up to be interpreted as strings.

      At least use int($low) .. int($high), to force $low and $high to be interpreted as numbers.

      Christian Lemburg
      Brainbench MVP for Perl
      http://www.brainbench.com

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (6)
As of 2024-04-16 06:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found