digitalmars.D.learn - Using "in" with associative arrays and then indexing them (efficiency)
- Matej Nanut (7/7) Jan 03 2012 SGVsbG8gZXZlcnlvbmUsCgpJIHdvdWxkIGxpa2UgdG8ga25vdyB3aGV0aGVyCgrCoMKgwqDC...
- =?UTF-8?B?QWxpIMOHZWhyZWxp?= (11/20) Jan 03 2012 Although the symbol is looked up twice, the cost may be negligible.
SGVsbG8gZXZlcnlvbmUsCgpJIHdvdWxkIGxpa2UgdG8ga25vdyB3aGV0aGVyCgrCoMKgwqDCoMKg wqDCoCBpZiAoc3ltYm9sIGluIHN5bWJvbHMpCsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gc3ltYm9sc1tzeW1ib2xdOwoKaXMgYW55IGxlc3MgZWZmaWNpZW50IHRoYW4KCsKg wqDCoMKgwqDCoMKgIGF1dG8gdG1wID0gc3ltYm9sIGluIHN5bWJvbHM7CsKgwqDCoMKgwqDCoMKg IGlmICh0bXAgIWlzIG51bGwpCsKgwqDCoMKgwqDCoMKgIMKgwqDCoMKgwqDCoMKgIHJldHVybiAq dG1wOwoKV2l0aG91dCBvcHRpbWlzYXRpb24sIGl0IGxvb2tzIGxpa2UgdGhlIGZpcnN0IGV4YW1w bGUKc2VhcmNoZXMgZm9yIGBzeW1ib2wnIHR3aWNlLgoKVGhhbmtzLApNYXRlago=
Jan 03 2012
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