digitalmars.D.learn - Growing multidimensional dynamic arrays
- KillerSponge (17/17) Oct 08 2012 Hi all,
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (29/46) Oct 08 2012 I don't see the need for 'new' nor the use of a pointer, so I will not
- KillerSponge (6/34) Oct 08 2012 Ah, that works great (even with pointers ;)! Thanks a lot! :) It
Hi all, This seems like something that should be possible: how do I grow multidimensional arrays? I want something like this: struct X{ ... }; X*[][] listOfLists; foreach ( x ; otherListOfX ) { if ( newListForArbitraryReason ) { listOfLists ~= new X*[]; } listOfLists[$] ~= x; } Now, this doesn't compile, because I _have_ to give a size to new X*[](arbitrary_number), and the listOfLists[$] ~= x; line never works (hangs at runtime). So, how would I go about doing this? My apologies if this is something really obvious.
Oct 08 2012
On 10/08/2012 06:12 AM, KillerSponge wrote:Hi all, This seems like something that should be possible: how do I grow multidimensional arrays? I want something like this: struct X{ ... }; X*[][] listOfLists; foreach ( x ; otherListOfX ) { if ( newListForArbitraryReason ) { listOfLists ~= new X*[]; } listOfLists[$] ~= x; } Now, this doesn't compile, because I _have_ to give a size to new X*[](arbitrary_number), and the listOfLists[$] ~= x; line never works (hangs at runtime). So, how would I go about doing this? My apologies if this is something really obvious.I don't see the need for 'new' nor the use of a pointer, so I will not use them (yet): :) import std.stdio; struct X { int i; } void main() { X[][] listOfLists; auto otherListOfX = [ X(1), X(2), X(3) ]; auto newListForArbitraryReason = true; foreach (x; otherListOfX) { if (newListForArbitraryReason) { X[] newList = [ x ]; listOfLists ~= newList; } } writeln(listOfLists); } The body of foreach can be shorter: listOfLists ~= [ x ]; Also note that - There is no need for the semicolon at the end of the struct definition. - $ is not a valid index value. The last element is indexed by $-1. Ali -- D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html
Oct 08 2012
On Monday, 8 October 2012 at 13:56:00 UTC, Ali Çehreli wrote:I don't see the need for 'new' nor the use of a pointer, so I will not use them (yet): :) import std.stdio; struct X { int i; } void main() { X[][] listOfLists; auto otherListOfX = [ X(1), X(2), X(3) ]; auto newListForArbitraryReason = true; foreach (x; otherListOfX) { if (newListForArbitraryReason) { X[] newList = [ x ]; listOfLists ~= newList; } } writeln(listOfLists); } The body of foreach can be shorter: listOfLists ~= [ x ]; Also note that - There is no need for the semicolon at the end of the struct definition. - $ is not a valid index value. The last element is indexed by $-1. AliAh, that works great (even with pointers ;)! Thanks a lot! :) It seems so obvious now. And the use of $ was indeed a stupid mistake on my part. I guess I was confused because of the way it is often used in slicing. I really should pay attention to that :)
Oct 08 2012