Thread overview
Basic Syntax Question
Apr 02, 2013
WhatMeWorry
Apr 02, 2013
Tobias Pankrath
Apr 02, 2013
John Colvin
Apr 02, 2013
John Colvin
Apr 02, 2013
WhatMeWorry
Apr 02, 2013
Ali Çehreli
April 02, 2013
I don't suppose there is a digital.D.beginner forum?

I've been staring at this definition for about an hour and I still can't decode it.

int[string][double[int[]]] a;  //
...
auto b = to!(short[wstring][string[double[]]])(a);  // this doesn't help either


int[string} a  // would be an Associate Array of integers with a string key?

int[]  // would be a dynamic array of integers,i believe?

But put the int[] inside of double[] and put that inside of [] and put that after the associative array, and my head can't stop for spinning.


If there is a better site or forum, please tell me and I won't waste people's time here. I did buy Andrei Alexandrescu's book and have it pretty well dog-eared. But i must be a pretty mediocre programmer.



April 02, 2013
On Tuesday, 2 April 2013 at 16:24:46 UTC, WhatMeWorry wrote:
>
> I don't suppose there is a digital.D.beginner forum?
>

There is D.learn. Scroll down in the webinterface :-)

> I've been staring at this definition for about an hour and I still can't decode it.
>
> int[string][double[int[]]] a;  //
Read it left to right :-)

Let's rewrite the type with placeholders U,V.
int[string][double[int[]]] --> int[U][V]

int[U][V] is an AA mapping keys of type V to values int[U], which is itself an AA that maps U's to int's.

Now, what is U and V? U is string that was easy. V is double[int[]]. That again is an AA, mapping from int[] to double.


> int[string} a  // would be an Associate Array of integers with a string key?

Nope, thats in syntax error.

> int[]  // would be a dynamic array of integers,i believe?
>
Correct.
April 02, 2013
On Tuesday, 2 April 2013 at 16:24:46 UTC, WhatMeWorry wrote:
>
> I don't suppose there is a digital.D.beginner forum?
>
> I've been staring at this definition for about an hour and I still can't decode it.
>
> int[string][double[int[]]] a;  //
> ...
> auto b = to!(short[wstring][string[double[]]])(a);  // this doesn't help either
>
>
> int[string} a  // would be an Associate Array of integers with a string key?
>
> int[]  // would be a dynamic array of integers,i believe?
>
> But put the int[] inside of double[] and put that inside of [] and put that after the associative array, and my head can't stop for spinning.
>
>
> If there is a better site or forum, please tell me and I won't waste people's time here. I did buy Andrei Alexandrescu's book and have it pretty well dog-eared. But i must be a pretty mediocre programmer.

I'm confused, did you find that definition somewhere or did you write it yourself?

int[string][double[int[]]]

Let's split it up:
alias double[int[]] T;

T is an associative array with key type int[] and value type double

So we now have
int[string][T]
Which is an associative array with key type T and value type int[string] (itself an associative array)

I hope that makes more sense.
April 02, 2013
On Tuesday, 2 April 2013 at 16:51:45 UTC, Tobias Pankrath wrote:
> On Tuesday, 2 April 2013 at 16:24:46 UTC, WhatMeWorry wrote:
>>
>> I don't suppose there is a digital.D.beginner forum?
>>
>
> There is D.learn. Scroll down in the webinterface :-)

This is in D.learn already.

>> int[string} a  // would be an Associate Array of integers with a string key?
>
> Nope, thats in syntax error.

Just a } vs ]  typo (just to avoid confusion)
April 02, 2013
On 04/02/2013 09:24 AM, WhatMeWorry wrote:>
> I don't suppose there is a digital.D.beginner forum?
>
> I've been staring at this definition for about an hour and I still can't
> decode it.
>
> int[string][double[int[]]] a;  //

alias usually makes the syntax cleaner but that is still pretty crazy. :)

void main()
{
    int[string][double[int[]]] a;

    alias Numbers = int[];
    alias NumbersToDoubleDict = double[Numbers];
    alias StringToIntDict = int[string];
    alias CrazyDict = StringToIntDict[NumbersToDoubleDict];

    CrazyDict b;

    static assert(is(typeof(a) == typeof(b)));
}

Ali

April 02, 2013
On Tuesday, 2 April 2013 at 16:52:17 UTC, John Colvin wrote:

int[string][double[int[]]] a;

>
> I'm confused, did you find that definition somewhere or did you write it yourself?
>

I found the above in an example in std.conv; Thank you, but I can assure you my brain is not powerful enough to come up with such a construct.