Thread overview
Insert an element into an Associative Array ?
Apr 04, 2012
Chris Pons
Apr 04, 2012
H. S. Teoh
Apr 04, 2012
Jacob Carlborg
Apr 04, 2012
ixid
Apr 04, 2012
ixid
Apr 04, 2012
Chris Pons
Apr 06, 2012
Ary Manzana
Apr 06, 2012
Jonathan M Davis
April 04, 2012
I'm playing around with associative arrays right now and I can't
seem to figure out how to add additional objects to the array. I
tried insert but it doesn't recognize both arguments.

Also, if I do this it produces an error:

Node[bool] test;

Node node;

Node[bool] temp = [ false:node ];

test ~= temp;


Error	1	Error: cannot append type Node[bool] to type
Node[bool]	C:\Users\CP\Documents\Visual Studio
2010\Projects\D\STDS\NPC.d	256	

Does this mean you can't use the append operator on associative
arrays ? ( this one ~= ) ?
April 04, 2012
On Wed, Apr 04, 2012 at 08:57:54PM +0200, Chris Pons wrote:
> I'm playing around with associative arrays right now and I can't seem to figure out how to add additional objects to the array. I tried insert but it doesn't recognize both arguments.
> 
> Also, if I do this it produces an error:
> 
> Node[bool] test;
> 
> Node node;
> 
> Node[bool] temp = [ false:node ];
> 
> test ~= temp;

Try:

	temp[false] = node;


T

-- 
One Word to write them all, One Access to find them, One Excel to count them all, And thus to Windows bind them. -- Mike Champion
April 04, 2012
On 2012-04-04 20:57, Chris Pons wrote:
> I'm playing around with associative arrays right now and I can't
> seem to figure out how to add additional objects to the array. I
> tried insert but it doesn't recognize both arguments.
>
> Also, if I do this it produces an error:
>
> Node[bool] test;
>
> Node node;
>
> Node[bool] temp = [ false:node ];
>
> test ~= temp;
>
>
> Error 1 Error: cannot append type Node[bool] to type
> Node[bool] C:\Users\CP\Documents\Visual Studio
> 2010\Projects\D\STDS\NPC.d 256
>
> Does this mean you can't use the append operator on associative
> arrays ? ( this one ~= ) ?

Yes, since for an associative array you need to add both a key and a value. The syntax used is this:

aa[key] = value;

i.e.

test[false] = node;

-- 
/Jacob Carlborg
April 04, 2012
You're trying to append to something that's not an array, you haven't set the value part to be an array so you're doing doing the same as:

int a;
a ~= 5;

which obviously doesn't work. If you want to append to an associative array create it like this:

Node[][bool] test; //Conceptually maybe clearer as Node[] test[bool]
Node node;
test[false] ~= node;

Or set them explicitly as other posters have explained if you don't want an array of values at a given key.


April 04, 2012
Oops, the comment should read as follows, and test[bool] should not be on the next line.

//Conceptually maybe clearer as Node[] test[bool]
April 04, 2012
Ok, thanks for the help, much appreciated.

On Wednesday, 4 April 2012 at 19:57:40 UTC, ixid wrote:
> Oops, the comment should read as follows, and test[bool] should not be on the next line.
>
> //Conceptually maybe clearer as Node[] test[bool]


April 06, 2012
On 4/5/12 2:57 AM, Chris Pons wrote:
> I'm playing around with associative arrays right now and I can't
> seem to figure out how to add additional objects to the array. I
> tried insert but it doesn't recognize both arguments.
>
> Also, if I do this it produces an error:
>
> Node[bool] test;
>
> Node node;
>
> Node[bool] temp = [ false:node ];
>
> test ~= temp;
>
>
> Error 1 Error: cannot append type Node[bool] to type
> Node[bool] C:\Users\CP\Documents\Visual Studio
> 2010\Projects\D\STDS\NPC.d 256
>
> Does this mean you can't use the append operator on associative
> arrays ? ( this one ~= ) ?

By the way, why is it called "associative array"? A name like Hash or Map would be much better. Everyone knows what a Hash means. I don't see anyone using "associative array" to refer to a Hash. And I think this is the source of the confusion Chris has...

I mean, you can't append to an associate array. What part of it makes it an "array"?
April 06, 2012
On Friday, April 06, 2012 11:46:24 Ary Manzana wrote:
> By the way, why is it called "associative array"? A name like Hash or Map would be much better. Everyone knows what a Hash means. I don't see anyone using "associative array" to refer to a Hash. And I think this is the source of the confusion Chris has...
> 
> I mean, you can't append to an associate array. What part of it makes it an "array"?

The term associative array is quite correct: http://en.wikipedia.org/wiki/Associative_array

Also, static arrays are arrays, but you can't append to them. And most programming languages with arrays don't have any form of array concatenation (certainly, among C-based languages, D is the only one that I'm aware of). They do with strings, but strings generally aren't arrays in such languages. So, the fact that something is an array says _nothing_ about whether you can append to it. The fact that you can with D's dynamic arrays is a fantastic feature, but it is by no means guaranteed simply because they're arrays.

And the very nature of an associative array pretty clearly doesn't make any sense with appending, since appending doesn't involve a key-value pair at all, so I'm honestly very surprised to see that anyone would make that mistake.

- Jonathan M Davis