www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Using "in" with associative arrays and then indexing them (efficiency)

reply Matej Nanut <matejnanut gmail.com> writes:
Jan 03 2012
parent =?UTF-8?B?QWxpIMOHZWhyZWxp?= <acehreli yahoo.com> writes:
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
Jan 03 2012