1, "b"=>2, "c" => 3} 如果我调用 Map.values(m) ,我保证返回值总是[1, 2, 3]按这个顺序而不-6ren">
gpt4 book ai didi

elixir - 当您在 map 上操作时,Elixir 中是否保留了键和值的顺序?

转载 作者:行者123 更新时间:2023-12-03 22:55:10 25 4
gpt4 key购买 nike

假设我在 Elixir 中有一张 map :

m = %{"a"=>1, "b"=>2, "c" => 3}

如果我调用 Map.values(m) ,我保证返回值总是 [1, 2, 3]按这个顺序而不是说, [3, 1, 2] ?

这是我从文档中不清楚的一件事。经过一些初步测试,我认为是。

最佳答案

来自 Elixir website :

Compared to keyword lists, we can already see two differences:

  • Maps allow any value as a key.
  • Maps’ keys do not follow any ordering.


虽然 Elixir 网站明确指出 map 不遵循任何顺序 ,它们在创建后确实遵循特定的顺序(但 不保留其创建顺序 )。似乎 map 是根据它们的键按字母顺序组织的(但除了 IEx 中的一些实验外,我没有什么可以支持的):

map = %{c: 3, a: 1, b: 2}

map # => %{a: 1, b: 2, c: 3}
Map.keys(map) # => [:a, :b, :c]
Map.values(map) # => [1, 2, 3]

由于您询问保留原始订单, 答案是不。

更好的选择:关键字列表

更好的选择是使用关键字列表(它是下面两个元素元组的链表)。因此,它们的创建顺序保持不变:

kw = [c: 3, a: 1, b: 2]

kw # => [c: 3, a: 1, b: 2]
Keyword.keys(kw) # => [:c, :a, :b]
Keyword.values(kw) # => [3, 1, 2]

关于elixir - 当您在 map 上操作时,Elixir 中是否保留了键和值的顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40392012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com