On Sunday, 7 April 2019 at 15:41:51 UTC, Robert M. Münch wrote:
I have an AA int[ulong] and would like to traverse the AA from
biggest to smallest by value. Is there an elegant way to do
this?
The only way I can imagine is to create an "reverse" AA of the
form ulong[int] and than sort by keys. Traverse this AA and use
the value as the lookup key in the orginial array. But this
feels all a bit wired...
You could use sort to gather the indexes in order then traverse
from there:
aa.byKey.array.sort!((a, b) => aa[a]<aa[b])
With a wrapper caching that order and making it transparent as
well as update on insertion (which should be in log(n) since you
know have an ordered list of indexes, you can use dichotomy to
update the indexes without walking all your AA again) I think you
could have a nice little container.
However if double entry is necessary maybe a simpler 2D array
would be easier to work with?