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.
On Tuesday, 13 October 2015 at 15:51:40 UTC, Alex Parrill wrote:
On Tuesday, 13 October 2015 at 15:17:15 UTC, data pulverizer
wrote:
Hi,
I am trying to use variantArray() as a data table object to
hold columns each of which is an array of a specific type. I
need to be able to get values from data table but I am having
problems ...
import std.stdio; // i/o
import std.variant; // type variations
void main(){
// Columns of the table
string[] names = ["walter", "paul", "jeff", "andrie"];
int[] age = [55, 62, 27, 52];
string[] language = ["D", "Haskell", "Julia", "D"];
Variant[] dt = variantArray(names, age, language);
foreach(col; dt){
foreach(el; col){
// here I try a kind of dynamic cast operator
auto x = el.get!(type(el)); // gives error
write(x);
}
write("\n");
}
}
data_table.d(37): Error: cannot infer type for el
data_table.d(38): Error: undefined identifier 'el'
Help
DP
You're trying to iterate over a `Variant`, which isn't
implemented.
You don't want to use a variant here anyway; you should use a
struct or tuple for each entry in the table.
import std.typecons;
alias Entry = Tuple!(string, int, string);
void main() {
auto table = [Entry("walter", 55, "D"), Entry("paul", 62,
"Haskell"), ... ]; // complete array
foreach(entry; table) {
writeln(entry.expand);
}
}