On Wed, Mar 21, 2012 at 07:56:47PM +0100, Andrej Mitrovic wrote:
> On 3/21/12, H. S. Teoh <hst...@quickfur.ath.cx> wrote:
> >     int[string][int] map;
> >     map["abc"] = int[int].init;
> >     map["abc"][30] = 123;
> 
> I think you meant:
> 
>     int[int][string] map;
>     map["abc"] = (int[int]).init;
>     map["abc"][30] = 123;

Yes, I did. :-)


> You can however init with null if the value is a hash:
> 
>     int[int][string] map;
>     map["abc"] = null;
>     map["abc"][30] = 123;
> 
> But otherwise I agree it would be nice if there was a shortcut for this.

Without this "shortcut", it's a complete pain to deal with deeply-nested
AA's:

        int[int][int][string] map;

        void inc_frequency(string entry, int x, int y) {
                if (entry in map) {
                        if (x in map[entry]) {
                                if (y in map[entry][x]) {
                                        map[entry][x][y]++;
                                } else {
                                        map[entry][x][y] = 1;
                                }
                        } else {
                                map[entry][x] = null;
                                map[entry][x][y] = 1;
                        }
                } else {
                        map[entry] = null;
                        map[entry][x] = null;
                        map[entry][x][y] = 1;
                }
        }

whereas if this was supported, the code would simply be:

        void inc_frequency(string entry, int xcoor, int ycoor) {
                map[entry][x][y]++;
        }

(And the above example is only 3 levels deep... it gets exponentially
worse with every level of nesting.)


T

-- 
Mediocrity has been pushed to extremes.

Reply via email to