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, const ref S s2)
{
s1.amount += s2.amount;
}
DList!S conflate(DList!S list)
{
DList!S ignore;
DList!S remaining;
foreach(p; list)
{
if(!ignore[].canFind(p))
{
foreach(o; list)
{
if(!ignore[].canFind(o))
{
if(same(p, o))
{
addUp(p, o);
ignore.insert(o);
}
}
}
remaining.insert(p);
}
}
return remaining;
}
void main()
{
DList!S list = [
S("a", 1), S("b", 2), S("a", 2), S("c", 5), S("b", 2), S("a", 3)
];
list = conflate(list);
writeln(list[]); //expected output [A("a", 6), A("b",4), A("c",5)]
}