Sort Associative Array by Key
Ali Çehreli
acehreli at yahoo.com
Thu Feb 9 19:39:07 UTC 2023
On 2/8/23 23:19, Alexander Zhirov wrote:
>> foo.byPair
>> .array
>> .sort!((a, b) => a.key < b.key)
>> .map!(a => a.value);
>
> Is it possible to specify in `map` to return the result `[a.key] =
> a.value`? To make the result look like `[key:[val], key:[val]]`
map can return a tuple and std.array.assocArray can make an associative
array from those tuples:
import std;
void main() {
auto aa = iota(10)
.map!(n => tuple(n, n * n))
.assocArray;
writeln("Necessarily unsorted:\n", aa);
}
However, as the original question started with an associative array
anyway, I don't think I understand your question correctly. :)
If you are asking whether an associative array can store in sorted key
order, then no, it's impossible because associative arrays are hash
tables, which can't provide that.
But we can visit the elements in sorted order if we sort those keys
ourselves:
auto keys = aa
.keys // <- Makes an array by copying the keys
.sort;
writeln("In order:");
foreach (k; keys) {
writeln(k, ": ", aa[k]);
}
Ali
More information about the Digitalmars-d-learn
mailing list