🖋️
Julia で順序あり辞書を順序なし辞書から作る
Julia の Dict
は順序なしですが、たまに順序ありが必要なときもあります。そんなときの Tips です。
順序なし辞書 unordered
の順序ありのコレクションは collect(unordered)
で得られます。ソートしたければそれをソートします。キーに関してソートするならば、
sort(collect(unordered), by=first)
とします。コレクションから順序あり辞書にするにはパッケージ OrderedCollections
の OrderedDict
を使います。このとき、
- 順序なし辞書 → 順序あり辞書 → ソートされた順序あり辞書
とするのではなく、
- 順序なし辞書 → ソートしたコレクション → ソートされた順序あり辞書
とした方が計算効率が良いです。変換するだけならソートも in-place で行った方が(sort
ではなく sort!
で)効率が良いです。
つまり、
using OrderedCollections
unordered = Dict(i => rand() for i = 1:1000)
ordered = OrderedDict(sort!(collect(unordered), by=first))
としましょう。
参考情報
- How do I sort a dictionary by its keys?, https://discourse.julialang.org/t/how-do-i-sort-a-dictionary-by-its-keys/37848.
Discussion