[Issue 2255] New: AA.remove() doesn't remove AA element when iterating using foreach
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Jul 30 14:28:19 PDT 2008
http://d.puremagic.com/issues/show_bug.cgi?id=2255
Summary: AA.remove() doesn't remove AA element when iterating
using foreach
Product: D
Version: 2.017
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: Phobos
AssignedTo: bugzilla at digitalmars.com
ReportedBy: dsimcha at yahoo.com
It appears that using the .remove function to remove an element from an
associative array does not always work when iterating over the AA with a
foreach loop. Some elements are removed and some aren't. This issue appears
on both DMD 2.017 and DMD 1.033. It also occurs on GDC 0.24, indicating that
it's a front end issue.
Here are two test cases:
//This one works.
import std.stdio;
void main () {
uint[uint] stuff;
for(uint i = 0; i < 10_000; i++) {
stuff[i] = i;
}
writefln(stuff.length); //Should be 10_000.
foreach(k; stuff.keys) { //Only this line is different between cases.
stuff.remove(k);
}
writefln(stuff.length); //Should be 0. Is.
}
//This one doesn't.
import std.stdio;
void main () {
uint[uint] stuff;
for(uint i = 0; i < 10_000; i++) {
stuff[i] = i;
}
writefln(stuff.length); //Should be 10_000.
foreach(k, v; stuff) { //Only this line is different between cases.
stuff.remove(k);
}
writefln(stuff.length); //Should be 0. Actually is about 4_000.
}
--
More information about the Digitalmars-d-bugs
mailing list