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.



Reply via email to