Thread overview | |||||
---|---|---|---|---|---|
|
March 26, 2005 3D Arrays - Non-block Arrays possible? | ||||
---|---|---|---|---|
| ||||
I still do not fully understand how arrays in D really work. And that is becoming apparent with 3D arrays. I hope someone can help me better understand them and how to manipulate them. E.g. char[3][5][] would be a 3x5 array, a 3x5 block no matter if element char[0] ever requires [5] elements or not. This is the way I used to handle 3D arrays in C. But in D I am starting to wonder if char[][][] d; a dynamic array, would let me define char[0][5][] char[1][2][] char[2][3][] meaning to be able to define how many elements char[0] will have (5), then a different number (2) for char[1] etc. Without having memory wasted by empty elements? If this is possible how would one define them? char[][][] d; d.length = 3; d[0].length = 5; d[1].length = 2; d[2].length = 3; Would that work? AEon |
March 26, 2005 Re: 3D Arrays - Non-block Arrays possible? | ||||
---|---|---|---|---|
| ||||
Posted in reply to AEon | On Sun, 27 Mar 2005 00:22:08 +0100, AEon wrote: > I still do not fully understand how arrays in D really work. And that is becoming apparent with 3D arrays. I hope someone can help me better understand them and how to manipulate them. > > E.g. char[3][5][] would be a 3x5 array, a 3x5 block no matter if element char[0] ever requires [5] elements or not. This is the way I used to handle 3D arrays in C. > > But in D I am starting to wonder if > > char[][][] d; > > a dynamic array, would let me define > > char[0][5][] > char[1][2][] > char[2][3][] > > meaning to be able to define how many elements char[0] will have (5), then a different number (2) for char[1] etc. Without having memory wasted by empty elements? > > If this is possible how would one define them? > > char[][][] d; > d.length = 3; > d[0].length = 5; > d[1].length = 2; > d[2].length = 3; > > Would that work? Yes. Another way of looking at this is ... alias char[] Line; alias Line[] Page; alias Page[] Chapter; void main() { Chapter d; d.length = 3; // This chapter has three pages. d[0].length = 6; // 1st page has 6 lines d[1].length = 7; // 2nd page has 7 lines d[2].length = 8; // 3rd page has 8 lines; d[0][0] = "Once upon a time, in land far, far, away"; d[0][1] = "there lived a crooked little man, named"; d[0][2] = "'Xyzzy'. One day he decided to clean up"; d[0][3] = "his cave. You see, he lived in a colossal"; d[0][4] = "cave, deep underground, with his two"; d[0][5] = "pets; a dwarf and a unicorn."; d[1][0] = "... etc ... etc ... etc "; } -- Derek Parnell Melbourne, Australia 27/03/2005 9:57:29 AM |
March 27, 2005 Re: 3D Arrays - Non-block Arrays possible? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Derek Parnell | Derek Parnell wrote:
> On Sun, 27 Mar 2005 00:22:08 +0100, AEon wrote:
>
>>I still do not fully understand how arrays in D really work. And that is becoming apparent with 3D arrays. I hope someone can help me better understand them and how to manipulate them.
>>
>>E.g. char[3][5][] would be a 3x5 array, a 3x5 block no matter if element
>>char[0] ever requires [5] elements or not. This is the way I used to handle 3D arrays in C.
>>
>>But in D I am starting to wonder if
>>
>> char[][][] d;
>>
>>a dynamic array, would let me define
>>
>> char[0][5][]
>> char[1][2][]
>> char[2][3][]
>>
>>meaning to be able to define how many elements char[0] will have (5), then a different number (2) for char[1] etc. Without having memory wasted by empty elements?
>>
>>If this is possible how would one define them?
>>
>> char[][][] d;
>> d.length = 3;
>> d[0].length = 5;
>> d[1].length = 2;
>> d[2].length = 3;
>>
>>Would that work?
>
>
> Yes. Another way of looking at this is ...
>
> alias char[] Line;
> alias Line[] Page;
> alias Page[] Chapter;
>
> void main()
> {
> Chapter d;
> d.length = 3; // This chapter has three pages.
> d[0].length = 6; // 1st page has 6 lines
> d[1].length = 7; // 2nd page has 7 lines
> d[2].length = 8; // 3rd page has 8 lines;
>
>
> d[0][0] = "Once upon a time, in land far, far, away";
> d[0][1] = "there lived a crooked little man, named";
> d[0][2] = "'Xyzzy'. One day he decided to clean up";
> d[0][3] = "his cave. You see, he lived in a colossal";
> d[0][4] = "cave, deep underground, with his two";
> d[0][5] = "pets; a dwarf and a unicorn.";
> d[1][0] = "... etc ... etc ... etc "; }
Thanx for the nix example, will try that.
Since I no longer have to use 3D blocks, this would *massively* reduce the amount of memory some of my temp stats calculations require, where (my guess) something like 90%+ of the arrays is never actually used.
And another good reason to use D :)
AEon
|
Copyright © 1999-2021 by the D Language Foundation