I haven't yet dug into formattedRead but thx for letting me
know : )
I was mostly speaking about the pattern with the AA. I guess
the best I can do is a templated function to hide the ugliness.
ref Value GetWithDefault(Value)(ref Value[string] map, const
(char[]) key) {
auto pValue = key in map;
if(pValue) return *pValue;
return map[key.idup] = Value.init;
}
void main() {
size_t[string][string] indexed_map;
foreach(char[] line ; stdin.byLine) {
char[] a;
char[] b;
size_t value;
line.formattedRead!"%s,%s,%d"(a,b,value);
indexed_map.GetWithDefault(a).GetWithDefault(b) = value;
}
indexed_map.writeln;
}
Not too bad actually !
As a total beginner I am feeling a bit not comfortable with basic
operations in AA.
First even I am very happy we have pointers but using pointers in
a common operation like this IMHO makes the language a bit not
safe.
Second "in" keyword always seemed so specific to me.
I think I will use your solution "ref Value
GetWithDefault(Value)" very often since it hides the two things
above.