www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How to clear associative array

reply Zarathustra <adam.chrapkowski gmail.com> writes:
As in subject.

Type [KeyType] array;

array[new KeyType(...)] = new Type(...);
...

delete array; // error
Aug 01 2008
next sibling parent "Steven Schveighoffer" <schveiguy yahoo.com> writes:
"Zarathustra"
 As in subject.

 Type [KeyType] array;

 array[new KeyType(...)] = new Type(...);
 ...

 delete array; // error

array = null; -Steve
Aug 01 2008
prev sibling parent reply BCS <ao pathlink.com> writes:
Reply to Zarathustra,

 As in subject.
 
 Type [KeyType] array;
 
 array[new KeyType(...)] = new Type(...);
 ...
 delete array; // error
 

I'm not sure how array=null will interact with other references to the same AA. This should clear them as well (but is more costly). foreach(k;array.keys)array.delete(k);
Aug 01 2008
parent reply "Steven Schveighoffer" <schveiguy yahoo.com> writes:
"BCS" wrote
 Reply to Zarathustra,

 As in subject.

 Type [KeyType] array;

 array[new KeyType(...)] = new Type(...);
 ...
 delete array; // error

I'm not sure how array=null will interact with other references to the same AA.

AA's are objects, so multiple references to the same AA would result in the data being retained for the references that you did not set to null. It would be nice to have a .clear function so you could deal with removing all elements when multiple references are used. -Steve
Aug 01 2008
next sibling parent BCS <ao pathlink.com> writes:
Reply to Steven,

 "BCS" wrote
 
 Reply to Zarathustra,
 
 As in subject.
 
 Type [KeyType] array;
 
 array[new KeyType(...)] = new Type(...);
 ...
 delete array; // error

the same AA.

in the data being retained for the references that you did not set to null. It would be nice to have a .clear function so you could deal with removing all elements when multiple references are used. -Steve

void clear(T)(T toClear) {foreach(key; toClear.keys) toClear.remove(key); } ?? O(n) (vs. O(1) for an internal version)
Aug 01 2008
prev sibling parent Max Samukha <samukha voliacable.com.removethis> writes:
On Fri, 1 Aug 2008 15:47:35 -0400, "Steven Schveighoffer"
<schveiguy yahoo.com> wrote:

"BCS" wrote
 Reply to Zarathustra,

 As in subject.

 Type [KeyType] array;

 array[new KeyType(...)] = new Type(...);
 ...
 delete array; // error

I'm not sure how array=null will interact with other references to the same AA.

AA's are objects, so multiple references to the same AA would result in the data being retained for the references that you did not set to null. It would be nice to have a .clear function so you could deal with removing all elements when multiple references are used. -Steve

It would be also nice to be able to initialize an AA reference without adding a value to the array. int[int] a; int[int] b = a; a[1] = 2; auto x = b[1]; // oops
Aug 01 2008