Rectangular Arrays

Bill Baxter dnewsgroup at billbaxter.com
Thu Feb 22 23:24:01 PST 2007


Another Roadside Attraction wrote:
> Thanks, Bill!!
> 
> I hadn't seen the array initialization syntax with the parenthetized arguments. It's kind of odd-looking. Do know know anything about its etymology? Since arrays already have bracketized declaration syntax, the parenthetized syntax seems like an unnecessary kludge.

Yeh, I have to look it up every time I need it.

But if you think of int[][][] as the complete type, it kind of makes 
sense.  It's just Type(arguments) where Type is int[][][] and arguments 
are (5,10,20).  So it's actually very consistent with standard 
constructor syntax.  In fact I'd guess you can probably do:

alias int[][][] Type;
Type x = new Type(5,10,20);

and it will probably work.

...And now that I've realized that, I probably won't forget that syntax 
ever again.  :-)

> Anyhow, the parenthetized syntax doesn't seem to be anywhere on the digital mars website or in any of the dsource tutorials.
> 
> http://digitalmars.com/d/arrays.html
> http://www.dsource.org/projects/tutorials/wiki/ArraysCategory

Yeh, it should be added to arrays, or at least the wiki comments page. 
Could you add it if you have a sec?

> Unfortunately, your multi-array library won't work for me, since it relies on templates. I won't know the size of the grid until runtime, so templates are a no-go.

Nope that's not an issue, at least with my multi-array lib.  You only 
need to know the _type_ of the elements at compile time.
    int[] sz = [5,20,30];
    auto array1 = new ndarray!(int)(sz);
    auto array2 = new ndarray!(int)(sz[0],sz[1],sz[2]);


But really you don't need it if you're just trying to make a grid of 
numbers that's accessibly by index.


> But the ragged arrays should be fine for now.

Yep, I suspect so as well.

> Thanks again,

No prob.

> --ARA
> 
> 
> Bill Baxter Wrote:
> 
>> D doesn't have rectangular arrays at the moment.  But you can init a 
>> multi-dim ragged array.
>>
>> http://www.digitalmars.com/d/expression.html#NewExpression
>>
>> int[][][] bar = new int[][][](5,20,30);
>> or
>> auto bar = new int[][][](5,20,30);
>>
>> I have some nd rectangular array at 
>> http://www.dsource.org/projects/multiarray
>> but it sounds like for your purposes the ragged array will be sufficient.
>>
>> --bb
> 


More information about the Digitalmars-d-learn mailing list