Thread overview
Initializing associative arrays
May 01, 2006
Tydr Schnubbis
May 02, 2006
Stewart Gordon
May 01, 2006
If I've got this array:

char[][][char[]] arr;

and want to initialize it, what do I do?  I couldn't make the initializer syntax work, I tried this:

arr = [["key1"]: ["one", "two"]];

Then I resorted to this:

static this() {
    arr["key1"] = split("one two");
}

And that works, but doesn't strike me as particularly obvious or practical.  It's a lot like the string list initializer trick I often use in python code.

Have I overlooked something here? Or maybe static initializers just aren't the right way to go for hashes?
May 02, 2006
"Tydr Schnubbis" <fake@address.dude> wrote in message news:e35k35$50a$1@digitaldaemon.com...
> Have I overlooked something here? Or maybe static initializers just aren't the right way to go for hashes?

They simply don't exist in D.  Nor do array initializers for any kind of non-static arrays.  Except character arrays.  They get special treatment.


May 02, 2006
Tydr Schnubbis wrote:
> If I've got this array:
> 
> char[][][char[]] arr;
> 
> and want to initialize it, what do I do?  I couldn't make the initializer syntax work, I tried this:
> 
> arr = [["key1"]: ["one", "two"]];
<snip>

Problem 1: That isn't an initialiser.  An initialiser is what follows the '=' in a _declaration_.

Problem 2: You've declared the key type as char[].  But you're trying to use a char[][] as the key.

Problem 3: D doesn't currently support initialisers for AAs.  Don't ask me why - I guess Walter just hasn't got round to putting it in.  But implementing the facility would at least enable this to work:

    char[][][char[]] arr = ["key1": ["one", "two"]];

Stewart.

-- 
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/M d- s:-@ C++@ a->--- UB@ P+ L E@ W++@ N+++ o K-@ w++@ O? M V? PS- PE- Y? PGP- t- 5? X? R b DI? D G e++++ h-- r-- !y
------END GEEK CODE BLOCK------

My e-mail is valid but not my primary mailbox.  Please keep replies on the 'group where everyone may benefit.