Moritz Warning wrote:
On Sat, 17 Oct 2009 18:58:08 +0000, BCS wrote:
what will this do?
foreach(key; aa.keys)
if(Test(key))
aa.remove(key);
It's undefined behavior.
You shouldn't try to mutate the aa while iterating.
I hope that will be fixed.
It took me some time to find this out.
That's really annoying, and it's true of most (all?) C# base class
library collections. When coding in C#, I often find myself doing:
var remove = new HashedSet<Foo>();
foreach (var foo in foos)
if (Test(foo)) remove.Add(foo);
foos.RemoveAll(remove);
It's more allocation than necessary, but more than that, it's an
unnecessarily complicated way of interacting with the collection.