On Wednesday, 9 August 2017 at 10:00:14 UTC, kerdemdemir wrote:
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.
You don't need this most of the time, if you already have the
correct type it's easy:
size_t[string][string] indexed_map;
string a, b; // a and b are strings not char[]
indexed_map[a][b] = value; // this will create the AA slots if
needed
In my specific case the data is streamed from stdin and is not
kept in memory.
byLine returns a view of the stdin buffer which may be replaced
at the next for-loop iteration so I can't use the index operator
directly, I need a string that does not change over time.
I could have used this code:
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[a.idup][b.idup] = value;
}
indexed_map.writeln;
}
It's perfectly ok if data is small. In my case data is huge and
creating a copy of the strings at each iteration is costly.