GG wrote: > Yes I can't use struct and/or enum because I can't know type and number of > data that user could pass. > In this example, we talk about Month, but it could be Minutes, week... So I > try to program dynamic not static.
If you're trying to program dynamically, then you're using the wrong language. Writing dynamically-typed code in D is like trying to write C in Python; it's missing the language's strengths. > In fact I'm learning D thought a little project of graphic chart. I would > like to keep a notion that I have found very usefull in AS3 : ArrayCollection. AS3 is dynamically typed; D is not. Variant can be used to 'fake' dynamic typing, but only to a certain degree. You can't call methods on Variants, operations on them are kinda flaky, etc. > I just want to know if it possible in D to have only one BIG collection of > any type of data (int,string,bool,double...) ? Arrays of Variant. > We talk about Variant but it could be other ? Maybe not... > > So I tried this : > Variant[char[]][int] aa; > > aa[0]["Month"] = Variant("Jan"); // compile > aa[0]["Profit"] = Variant(500); // compile > > aa[1]["Month"] = Variant("Feb"); // compile > aa[1]["Profit"] = Variant(800); // compile > > for(int i=0;i<aa.length;i++) // compile failed on aa.length and get > dmd: mtype.c:3426: StructDeclaration* TypeAArray::getImpl(): Assertion `impl' > failed. AAs don't have a length (as far as I remember). Besides which, there's NOTHING that says the keys for aa are sequential. If you want a sequence, use an array. You should probably read the documentation on how to use AAs. > { > writefln("%s",aa[i]["Month"]); // compile but get at runtime : > core.exception.rangeer...@test(25): Range violation > } What you want is probably more along these lines: foreach( k,v ; aa ) { writefln("%s", v); } > It seems to be a bug... > > Thanks !