On 01/03/2012 02:52 AM, Matej Nanut wrote:
> I would like to know whether
>
> if (symbol in symbols)
> return symbols[symbol];
>
> is any less efficient than
>
> auto tmp = symbol in symbols;
> if (tmp !is null)
> return *tmp;
>
> Without optimisation, it looks like the first example
> searches for `symbol' twice.
Although the symbol is looked up twice, the cost may be negligible.
Being hash tables, AAs have constant time lookup. Algorithmically,
looking up twice is the same as looking up once in hash tables.
When we assume that the looked-up object is going to be used in a
non-trivial operation, then it doesn't matter.
Having said that, I would use the second version too :D perhaps shorter as
if (tmp) {
// use *tmp
}
Ali