🖋️

Julia で順序あり辞書を順序なし辞書から作る

2024/06/03に公開

Julia の Dict は順序なしですが、たまに順序ありが必要なときもあります。そんなときの Tips です。
順序なし辞書 unordered の順序ありのコレクションは collect(unordered) で得られます。ソートしたければそれをソートします。キーに関してソートするならば、

sort(collect(unordered), by=first)

とします。コレクションから順序あり辞書にするにはパッケージ OrderedCollectionsOrderedDict を使います。このとき、

  • 順序なし辞書 → 順序あり辞書 → ソートされた順序あり辞書

とするのではなく、

  • 順序なし辞書 → ソートしたコレクション → ソートされた順序あり辞書

とした方が計算効率が良いです。変換するだけならソートも in-place で行った方が(sort ではなく sort! で)効率が良いです。
つまり、

using OrderedCollections

unordered = Dict(i => rand() for i = 1:1000)
ordered = OrderedDict(sort!(collect(unordered), by=first))

としましょう。

参考情報

  1. 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