cljs.reader / read-string читает содержимое объектов в случайном порядке - PullRequest
0 голосов
/ 11 октября 2019

Я не понимаю, почему функция 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"}}}

Почему это происходит со мной? :)

1 Ответ

1 голос
/ 11 октября 2019

Карты Clojure представляют собой неупорядоченную структуру данных. Он читается в том порядке, в котором он хранится в файле, и пары ключ / значение, скорее всего, добавляются на карту в памяти во время чтения, но когда вы затем просматриваете карту в памяти, ее ключ / значениепары возвращаются в порядке, связанном с внутренними деталями реализации реализации карты, обычно включающими хэш-значения ключей.

Если вы хотите сохранить порядок, списки и векторы Clojure гарантированно сделают это. Нормальных карт и наборов нет. Существуют отсортированные варианты карт и наборов, но для их использования в файле формата EDN требуется особая обработка, которую я раньше не использовал.

...