digitalmars.D.learn - 3D Arrays - Non-block Arrays possible?
- AEon (23/23) Mar 26 2005 I still do not fully understand how arrays in D really work. And that is...
- Derek Parnell (25/56) Mar 26 2005 Yes. Another way of looking at this is ...
- AEon (7/66) Mar 26 2005 Thanx for the nix example, will try that.
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
Mar 26 2005
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
Mar 26 2005
Derek Parnell wrote:On Sun, 27 Mar 2005 00:22:08 +0100, AEon wrote: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 :) AEonI 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 "; }
Mar 26 2005