Karim Belabas on Tue, 23 Apr 2019 23:02:27 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Iterating over a map content


* Jérôme Raulin [2019-04-23 22:18]:
> Is there a better way of iterating over an entire map content than something
> like :
> 
> 	map = Map();
> 	\\ Do stuff with map
> 	mapkeys = Vec(map);
> 	for (i = 1, # mapkeys,
> 		key = mapkeys[i];
> 		value = mapget(map, key);
> 		\\ Do other stuff with (key, value)
> 	);
> 
> There is at least two issues with this implementation :
> * Storage duplication, keys are stored in both map and mapkeys.
> * Access performance, all values are looked up from standard map access.

Here's a better way:

  M = Mat(map);
  for (i = 1, matsize(M)[1],
    my([key, value] = M[i,]);
    \\ ...
  )

You still get storage duplication though, which is unavoidable unless you're
willing to destroy the map (e.g., map = Mat(map))

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 21 23
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`