xxxxxxxxxx
import std.stdio;
import std.container;
import std.range;
import std.algorithm;
struct S
{
string id;
int amount;
}
bool same(S s1, S s2)
{
return s1.id == s2.id;
}
void addUp(ref S s1, ref S s2)
{
s1.amount += s2.amount;
}
void conflate(ref DList!S list)
{
auto iterate = list[];
while (!iterate.empty)
{
auto p = iterate.front;
iterate.popFront();
list[].filter!(a => same(a, p))
.each!(a => addUp(p, a));
list.stableRemove(list[].filter!(a => !same(a, p)));
}
}
void main()
{
DList!S list = [
S("a", 1), S("b", 2), S("a", 2), S("c", 5), S("b", 2), S("a", 3)
];
conflate(list);
writeln(list[]); //expected output [A("a", 6), A("b",4), A("c",5)]
}