Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: Ignore Case when comparing Hash Keys

by moritz (Cardinal)
on Nov 15, 2010 at 18:40 UTC ( [id://871536]=note: print w/replies, xml ) Need Help??


in reply to Ignore Case when comparing Hash Keys

First transform one of the hashes to use all lowercase keys. Then check existence of lc $other_key.

Here's a Perl 6 solution:

my %lc1 = %hash1.keys>>.lc Z %hash1.values; for %hash2.keys -> $k { say "$k ", %lc1.exists($k) ?? 'Matched' !! 'Did not match'; }

Transforming the code to Perl 5 shouldn't be too hard.

Replies are listed 'Best First'.
Re^2: Ignore Case when comparing Hash Keys
by avidcoder (Novice) on Nov 15, 2010 at 18:56 UTC
    I cant convert the Hash Keys to lower case, because I want to display the Keys and Values Side by side in the output and I want to keep the original Case of the Keys. I was wondering if there is something like if ($a =~ /$search/i) kind of comparison that ignores the case and matches the keys. Also I want the hash to give me the value of the key

      avoidcoder:

      I don't advise it, but you could do something like:

      %hash1 = ("John", 43, "Paul", 25, "Marie", 22); %hash2 = ("john", 43, "Paul", 25, "marie", 22); while (($KEY_2, $VALUE_2) = each %hash2){ if (grep { m/$KEY_2/i } keys %hash1) { print "$KEY_2 : Matched\n"; } else{ print "$KEY_2 : Did not match\n"; } }

      Note: Untested, you can keep all the bits when it breaks, etc.

      ...roboticus

        Robotics Thanks. This works in Key Comparison but how do i get the value of the corresponding Key in the if block? Thanks again.
      I cant convert the Hash Keys to lower case, because I want to display the Keys and Values Side by side in the output and I want to keep the original Case of the Keys.

      Then use another hash that maps lower case key to the correctly cased key.

      Also note that the original hash with the correctly cased keys still exists, and stands at your disposal.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2024-04-25 11:26 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found