www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Merging two hashes

reply Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
Is there a way to merge the keys from one hash to another (overwriting
any duplicates) without using a foreach loop? E.g.:

void main()
{
    int[int] a, b;
    a[0] = 0;
    b[1] = 1;

    b += a;  // ?
}

It's not too hard to write this of course:
    foreach (key, val; a)
        b[key] = val;

But I'm wondering if an enhancement request is in order, maybe an
operator overload, or maybe a special merge function.
Jan 20 2012
parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
On Fri, 20 Jan 2012 12:46:40 -0500, Andrej Mitrovic  
<andrej.mitrovich gmail.com> wrote:

 Is there a way to merge the keys from one hash to another (overwriting
 any duplicates) without using a foreach loop? E.g.:

 void main()
 {
     int[int] a, b;
     a[0] = 0;
     b[1] = 1;

     b += a;  // ?
 }

 It's not too hard to write this of course:
     foreach (key, val; a)
         b[key] = val;

 But I'm wondering if an enhancement request is in order, maybe an
 operator overload, or maybe a special merge function.
You can in dcollections :) http://www.dsource.org/projects/dcollections/browser/branches/d2/dcollections/model/Map.d#L40 -Steve
Jan 20 2012
parent Andrej Mitrovic <andrej.mitrovich gmail.com> writes:
Nice!

On 1/20/12, Steven Schveighoffer <schveiguy yahoo.com> wrote:
 On Fri, 20 Jan 2012 12:46:40 -0500, Andrej Mitrovic
 <andrej.mitrovich gmail.com> wrote:

 Is there a way to merge the keys from one hash to another (overwriting
 any duplicates) without using a foreach loop? E.g.:

 void main()
 {
     int[int] a, b;
     a[0] = 0;
     b[1] = 1;

     b += a;  // ?
 }

 It's not too hard to write this of course:
     foreach (key, val; a)
         b[key] = val;

 But I'm wondering if an enhancement request is in order, maybe an
 operator overload, or maybe a special merge function.
You can in dcollections :) http://www.dsource.org/projects/dcollections/browser/branches/d2/dcollections/model/Map.d#L40 -Steve
Jan 20 2012