我不明白为什么cljs.reader / read-string函数以随机顺序读取我edn文件的内容。这是一个示例文件内容:
{:data
{:name-tit
{:hu "Név"
:en "Name"}
:description-tit
{:hu "Leírás"
:en "Description"}
:short-description-tit
{:hu "Rövid leírás"
:en "Short description"}
:title-tit
{:hu "Cím"
:en "Title"}
:label-tit
{:hu "Címke"
:en "Label"}
:color-tit
{:hu "Szín"
:en "Color"}
:color-gradient-tit
{:hu "Színátmenet"
:en "Color gradient"}
:link-tit
{:hu "Link"
:en "Link"}
:target-tit
{:hu "Link target"
:en "Link target"}
:weight-tit
{:hu "Tömeg"
:en "Weight"}
:length-tit
{:en "Length"
:hu "Hossz"}
:width-tit
{:en "Width"
:hu "Szélesség"}
:height-tit
{:en "Height"
:hu "Magasság"}}}
这是read-string函数的输出:
{:data {:weight-tit {:hu "Tömeg", :en "Weight"}, :color-tit {:hu "Szín", :en "Color"}, :height-tit {:en "Height", :hu "Magasság"}, :short-description-tit {:hu "Rövid leírás", :en "Short description"}, :label-tit {:hu "Címke", :en "Label"}, :link-tit {:hu "Link", :en "Link"}, :title-tit {:hu "Cím", :en "Title"}, :name-tit {:hu "Név", :en "Name"}, :target-tit {:hu "Link target", :en "Link target"}, :width-tit {:en "Width", :hu "Szélesség"}, :length-tit {:en "Length", :hu "Hossz"}, :color-gradient-tit {:hu "Színátmenet", :en "Color gradient"}, :description-tit {:hu "Leírás", :en "Description"}}}
为什么这会发生在我身上? :)
答案 0 :(得分:1)
Clojure映射是无序的数据结构。它以存储在文件中的顺序被读取,并且键/值对很可能在读取时被添加到内存中的映射,但是当您遍历内存中的映射时,其键/值对将按照与地图实现的内部实现详细信息相关的顺序返回,通常涉及键的哈希值。
如果要保留顺序,可以保证Clojure列表和向量可以做到这一点。法线贴图和集合不是。映射和集合有各种排序形式,但是在EDN格式文件中使用它们需要一些特殊处理,而我以前从未使用过。