Thread overview
Associative Arrays
Mar 16, 2007
Dan
Mar 16, 2007
Carlos Santander
Mar 16, 2007
Stewart Gordon
Mar 16, 2007
Carlos Santander
Mar 16, 2007
Dan
March 16, 2007
Walter, what's happening with them?

Last I checked, I couldn't use practically anything of them:

const char[] TEXT_x = "x";
int[char[]] x;

x.length = 1; // doesn't work, no property length x["hello"] = 1; // doesn't work, array out of bounds x[TEXT_x] = 1; // doesn't work, array out of bounds

Also, there was a drowned out call by some folks to get static associative arrays.

What would be the primary blocker for that?  The use of pointers for hashing?

Is it possible to use opIndex etc to override associatives?
March 16, 2007
Dan escribió:
> Walter, what's happening with them?
> 
> Last I checked, I couldn't use practically anything of them:
> 
> const char[] TEXT_x = "x";
> int[char[]] x;
> 
> x.length = 1; // doesn't work, no property length
> x["hello"] = 1; // doesn't work, array out of bounds
> x[TEXT_x] = 1; // doesn't work, array out of bounds
> 
> Also, there was a drowned out call by some folks to get static associative arrays.
> 
> What would be the primary blocker for that?  The use of pointers for hashing?
> 
> Is it possible to use opIndex etc to override associatives?

What exactly are you doing? This compiles and runs successfully with GDC 0.23, and should be the same with DMD (unless something is broken with 1.009):

void main ()
{
    const char[] TEXT_x = "x";
    int[char[]] x;

    //x.length = 1;
    x["hello"] = 1;
    x[TEXT_x] = 1;
}

And yeah, AAs don't have length. You can get their length with x.keys.length, but you can't set it.

-- 
Carlos Santander Bernal
March 16, 2007
Carlos Santander Wrote:

<snip>
> And yeah, AAs don't have length.  You can get their length with x.keys.length, but you can't set it.

I've no idea where you get that idea from.  AAs do have length.  It's just read-only.

Stewart.
March 16, 2007
Stewart Gordon escribió:
> Carlos Santander Wrote:
> 
> <snip>
>> And yeah, AAs don't have length.  You can get their length with x.keys.length, but you can't set it.
> 
> I've no idea where you get that idea from.  AAs do have length.  It's just read-only.
> 
> Stewart.

That's what I meant, mostly :)

-- 
Carlos Santander Bernal

March 16, 2007
Carlos Santander Wrote:

> What exactly are you doing? This compiles and runs successfully with GDC 0.23, and should be the same with DMD (unless something is broken with 1.009):
> 
> void main ()
> {
>      const char[] TEXT_x = "x";
>      int[char[]] x;
> 
>      //x.length = 1;
>      x["hello"] = 1;
>      x[TEXT_x] = 1;
> }
> 
> And yeah, AAs don't have length. You can get their length with x.keys.length, but you can't set it.

Okay, thanks Carlos.  I'll have to run the simplified test case, but for Walnut, I couldn't use a Value[char[]] in any of the ways described (Value is a struct).  I could declare the associative arrays and handle them, but not populate the associative array with anything or set the length.

I thought associative arrays might not be dynamic because it was giving me an Array out of bounds exception when I tried to assign to it.

~~~

Regarding the opIndex, what I meant was perhaps being able to, for example, define an override for line two of:

1 ||  int[char[]] x;
2 || x["hello"] = 0;

It's not clear in documentation whether you can or not, only that you can do it with int's - one would assume in static or dynamic arrays.