is there a merge for associative arrays
Daniel Davidson
nospam at spam.com
Tue Nov 5 09:16:35 PST 2013
The code below causes a crash. What is the idiomatic way to merge
associative arrays? If there is a simple version that allows the
value at a key to be clobbered by the value of the right hand
operand when there is a collision, that is a start.
import std.stdio;
void main() {
double[string] a = [ "foo" : 22.2 ];
double[string] b = [ "bar" : 22.2 ];
writeln(a+b);
}
Is there a way to do something like this and have opApply be
called for '+'?
If so, is it a bad idea?
import std.stdio;
double[string] opApply(string op)(const double[string][] inputs
...)
if(op == "+") {
double[string] result;
foreach( map ; inputs ) {
foreach( key, value ; map ) {
auto pval = key in result;
if(pval) {
*pval += value;
} else {
result[key] = value;
}
}
}
return result;
}
void main() {
double[string] a = [ "foo" : 22.2 ];
double[string] b = [ "bar" : 22.2 ];
double[string] c = [ "bar" : 5 ];
auto d = a+b+c;
}
More information about the Digitalmars-d-learn
mailing list