dynamic get from variantArray() data table

Alex Parrill via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Oct 13 09:38:10 PDT 2015


On Tuesday, 13 October 2015 at 16:22:36 UTC, data pulverizer 
wrote:
> Thanks for the suggestion Alex, however I need the dynamic 
> behaviour properties of variantArray(), writing a struct each 
> time would be undesirable.
>
> Perhaps I could boil down the question to something like, is 
> there a way of writing
>
> auto x = dt[0][0];
> auto y = x.get!(x.type - or whatever); // to get the actual 
> value of x rather than .VariantN! ... type
>
> For some kind of auto cast back to basic type.

The problem is that you can't do `x.get!(x.type)`, because the 
type of the expression must be known at compile time, but 
`x.type` is a runtime value. You'd have to create a branch for 
each type that `x.type` might be.

But again, unless you are dealing with a truly dynamic layout 
(and not a bunch of fixed layouts), there's better options. For 
example, you can use `std.range.zip` to iterate through each 
column array in lockstep, returning tuples for each element.


foreach(entry; zip(names, ages, languages)) {
     write(entry.expand);
}




More information about the Digitalmars-d-learn mailing list