associative arrays
Jonathan M Davis
jmdavisProg at gmx.com
Sat Jan 7 19:05:16 PST 2012
On Saturday, January 07, 2012 21:54:07 bearophile wrote:
> Maybe D associative arrays too should have both kinds of deleting methods
> :-)
Why? What's the gain? If you care that the element is already in the AA, then
do either
assert(key in aa);
aa.remove(key);
or
enforce(key in aa);
aa.remove(key);
I suppose that that's less efficient than remove throwing on failure, since it
has to do a double lookup, but since throwing the exception costs _far_ more
than that, I don't think that the extra cost really matters
But if you _don't_ care whether the element is in the AA when you remove it,
and remove threw when the element wasn't there, then you'd have to do
if(key in aa)
aa.remove(key);
which would result is a double lookup when you don't want one, and performance
_would_ matter, since there isn't necessarily another operation which would
cost a lot which is overshadowing the cost of the double lookup (as occurs in
the case where you throw the exception when the element isn't there). Also, if
you considered the key not being there to be a bug (as seems more likely to
me), the fact that remove then threw an assertion would force you to do the
extra check _anyway_.
assert(key in aa);
aa.remove(key);
So, as far as I can tell, the current situation is more efficient, and it
doesn't cost you any expressiveness. You can still have an exception thrown
when remove fails if you use enforce before the call if you want an exception
thrown when the element isn't there.
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list