www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - arrays again :)

reply "Ivan Senji" <ivan.senji public.srce.hr> writes:
There are many ways (for example) to create a twodimensional
dynamic array in D:

(a)
 int[][] p1;
 p1 = new int[][15];
 for(int i=0;i<p1.length; i++)
 {
  p1[i] = new int[i+5];
 }

(b)
 int[][] p2;
 for(int i=0;i<15; i++)
 {
  p2 ~= new int[i+5];
 }

(c)
 int[][] p3;
 p3.length = 15;
 for(int i=0;i<15; i++)
 {
  p3[i].length=i+5;
 }

and it would be easy to combine (a) and (b) to have two more ways.

There are 0 ways to create a rectangular arrays in D dynamically and it
would be great if there were only one, wouldn't it :)

int [][] rect = new int[10][10]; or
int [,] rect = new int[10][10]; or
int [;] rect = new int[10][10]; or anything else!
May 04 2004
parent reply Drew McCormack <drewmccormack mac.com> writes:
 There are 0 ways to create a rectangular arrays in D dynamically and it
 would be great if there were only one, wouldn't it :)
 
 int [][] rect = new int[10][10]; or
 int [,] rect = new int[10][10]; or
 int [;] rect = new int[10][10]; or anything else!
I agree. I think this would be more logical than the current state of affairs where you have static arrays. Static arrays are not needed if you can create rectangular arrays on the heap. int[4][5] a; could simply be replaced by int[][] a = new int[4][5]; This would be more consistent with the rest of D, where most things are created on the heap. Drew McCormack
May 04 2004
parent reply Norbert Nemec <Norbert.Nemec gmx.de> writes:
Drew McCormack wrote:

 
 There are 0 ways to create a rectangular arrays in D dynamically and it
 would be great if there were only one, wouldn't it :)
 
 int [][] rect = new int[10][10]; or
 int [,] rect = new int[10][10]; or
 int [;] rect = new int[10][10]; or anything else!
I agree. I think this would be more logical than the current state of affairs where you have static arrays. Static arrays are not needed if you can create rectangular arrays on the heap. int[4][5] a; could simply be replaced by int[][] a = new int[4][5]; This would be more consistent with the rest of D, where most things are created on the heap. Drew McCormack
Be careful there! Statically sized arrays are something different from dynamically sized arrays. int[3] is a different type from int[4], which again is different from int[], even if that has the dynamic size 4. There are plenty of uses for statically sized arrays that are created on the stack (or directly inside of structs and classes) and D definitely needs both (and - for 1-d already has) both of them well distinguished. The idea of having int[][] a = new int[10][10] is very misleading. int[][] just is no rectangular array, but a ragged array (even, if, by chance, all the rows have the same size). If you really want to extend the language, go for real rectangular arrays, where my suggestion for a good syntax would be int[,] a = new int[10,10]
May 04 2004
parent reply "Ivan Senji" <ivan.senji public.srce.hr> writes:
"Norbert Nemec" <Norbert.Nemec gmx.de> wrote in message
news:c78ckg$cp2$1 digitaldaemon.com...
 Drew McCormack wrote:

 There are 0 ways to create a rectangular arrays in D dynamically and it
 would be great if there were only one, wouldn't it :)

 int [][] rect = new int[10][10]; or
 int [,] rect = new int[10][10]; or
 int [;] rect = new int[10][10]; or anything else!
I agree. I think this would be more logical than the current state of affairs where you have static arrays. Static arrays are not needed if you can create rectangular arrays on the heap. int[4][5] a; could simply be replaced by int[][] a = new int[4][5]; This would be more consistent with the rest of D, where most things are created on the heap. Drew McCormack
Be careful there! Statically sized arrays are something different from dynamically sized arrays. int[3] is a different type from int[4], which again is different from int[], even if that has the dynamic size 4. There are plenty of uses for statically sized arrays that are created on the stack (or directly inside of structs and classes) and D definitely needs both (and - for 1-d already has) both of them well distinguished. The idea of having int[][] a = new int[10][10] is very misleading. int[][] just is no rectangular array, but a ragged
array
 (even, if, by chance, all the rows have the same size). If you really want
 to extend the language, go for real rectangular arrays, where my
suggestion
 for a good syntax would be
         int[,] a = new int[10,10]
Exactly what i had in mind. I really hope D gets this because support for dynamic jagged arrays is great, and this is just one little part that is missing. Maybe not for D 1.0 but some later version should really corect this.
May 04 2004
parent reply Norbert Nemec <Norbert.Nemec gmx.de> writes:
Ivan Senji wrote:
 The idea of having
         int[][] a = new int[10][10]
 is very misleading. int[][] just is no rectangular array, but a ragged
array
 (even, if, by chance, all the rows have the same size). If you really
 want to extend the language, go for real rectangular arrays, where my
suggestion
 for a good syntax would be
         int[,] a = new int[10,10]
Exactly what i had in mind. I really hope D gets this because support for dynamic jagged arrays is great, and this is just one little part that is missing. Maybe not for D 1.0 but some later version should really corect this.
I have just started to write up a detailed proposal for multidimensional, rectangular arrays in D. I have a pretty clear vision for them and hope to have it all written and uploaded by next week.
May 05 2004
parent "Ivan Senji" <ivan.senji public.srce.hr> writes:
"Norbert Nemec" <Norbert.Nemec gmx.de> wrote in message
news:c7a7q3$6fi$1 digitaldaemon.com...
 Ivan Senji wrote:
 The idea of having
         int[][] a = new int[10][10]
 is very misleading. int[][] just is no rectangular array, but a ragged
array
 (even, if, by chance, all the rows have the same size). If you really
 want to extend the language, go for real rectangular arrays, where my
suggestion
 for a good syntax would be
         int[,] a = new int[10,10]
Exactly what i had in mind. I really hope D gets this because support
for
 dynamic jagged arrays is great, and this is just one little part that is
 missing.
 Maybe not for D 1.0 but some later version should really corect this.
I have just started to write up a detailed proposal for multidimensional, rectangular arrays in D. I have a pretty clear vision for them and hope to have it all written and uploaded by next week.
Really GREAT :) I hope Walter reads it and likes it!!
May 05 2004