develooper Front page | perl.perl6.users | Postings from December 2019

My keeper on hashes

Thread Next
From:
ToddAndMargo via perl6-users
Date:
December 6, 2019 10:39
Subject:
My keeper on hashes
Message ID:
8b9f074a-6853-e12a-f0f9-2d10642b6da2@zoho.com
Hi All,

My favorite variable is the associative array (hash).  I finally updated 
my keeper file on them.

If anyone is interested, here goes!

-T


Perl 6 Hashes (associative arrays):

References:
    https://docs.perl6.org/language/subscripts#Basics
    https://docs.perl6.org/type/Hash#:exists


A hash "associates" a Name, called a "key" to a Value, called a "value"

    You assign them as follows;

       # use whatever is easiest on the eyes
       my %h =   a => "A", b => "B";      or
       my %h = ( a => "A", b => "B" );    or
       my %h = [ a => "A", b => "B" ];
       {a => A, b => B}

       say %h.keys
       (b a)

       say %h.values
       (B A)

    You read them as follows:
       $v = %h<b>
       B

       When the key is a variable, your read them as follows
          $k = "a"
          $v = %h{$k}
          A


    Looping through a hash:
    Note: hashes DO NOT loop in the order that they were entered into 
the hash

        for @x.kv -> $key, $value {do something};

        For example:

           my %h = a => "x", b=>"r", c=>"z";
           for %h.kv ->  $key, $value {say "key = $key  value = $value"; }
           key = c  value = z
           key = a  value = x
           key = b  value = r

    Array's of hashes:
        my @a;
        my %h1; my %h2;

        %h1 = a => 0, b => 1, c => 2;
        %h2 = a => 9, b => 8, c => 7;

        push @a, {%h1};
        push @a, {%h2};

        say @a;
        [{a => 0, b => 1, c => 2} {a => 0, b => 1, c => 2}]

        for @a.kv -> $i, $h { say "$i\n" ~ "$h\n"; };
        # Note: the ~ is to make it easier to read
        #       even though $h is address as $ it is a hash
            0
            a	0
            b	1
            c	2

            1
            a	9
            b	8
            c	7


     Checking for the presence of a key/value:
        my %h = a => "x", b=>"r", c=>"z";
        if %h<c> { say "exists"; } else { say "DOES NOT exist"; }
        DOES NOT exist

        if %h<b> { say "exists"; } else { say "DOES NOT exist"; }
        exists


    Deleting a key/value pair:
    Note: "delete" is called an "adverb" in this context
        my %h = a => "x", b=>"r", c=>"z";
        %h<b>:delete; say %h
        {a => x, c => z}


    Display a key/value pair  (:p adverb):
        my %h = a => "x", b=>"r", c=>"z";
        say %h<a>:p;
        a => x
        say %h<a b>:p;   # note: no comma between the a and the b
        (a => x b => r)


    Return the key and value with the :k and :bv adverbs:
        my %h = a => 1, b => 2;
        say %h<a>:k;
        a

        say %h<a b>:k;
       (a b)

       say %h<a b>:v;
       (1 2)

       Empty <> return everything:
          say %h<>:v;
          (2 1)

          say %h<>:k;
          (b a)

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About