【问题标题】:How to get ordered key-value pairs from a map, given an ordered list of keys?给定有序的键列表,如何从映射中获取有序的键值对?
【发布时间】:2021-02-17 14:01:40
【问题描述】:

给定一个地图,我想按给定顺序对键值对进行排序,我将通过所有键的列表提供该顺序。由于地图是无序的集合,我用关键字列表替换了地图。但是现在我正在努力根据给定的键列表对所有条目进行排序。如果有人知道在 elixir 中解决此问题的方法,请告诉我。提前致谢。

【问题讨论】:

    标签: sorting dictionary elixir key-value


    【解决方案1】:

    您可以使用Enum.map/2 将排序后的键列表映射到映射中相应的键值对:

    ordered_keys = [:a, :b, :c]
    
    map = %{
      a: 1,
      b: 2,
      c: 3
    }
    
    Enum.map(ordered_keys, &{&1, map[&1]})
    

    输出:

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

    如果您愿意,也可以使用comprehension

    for key <- ordered_keys, do: {key, map[key]}
    

    【讨论】:

    • 我相信他们想要回 kw,所以应该分别是 &amp;{&amp;1, map[&amp;1]}do: {key, map[key]}
    • 嗨 @Adam 我想要 kw 或映射回来,我对 elixir 语法不太熟悉。你们能纠正它以返回地图或kw吗?谢谢
    • 嗨@Aleksei 其实我不知道如何使用你添加的cmets。您能否详细说明一下。谢谢
    • Enum.map(ordered_keys, &amp;{&amp;1, map[&amp;1]})for key &lt;- ordered_keys, do: {key, map[key]}。两者都会返回一个排序的关键字列表。
    • 我编辑了我认为你想要的问题,并更新了答案(与 Aleksei 的建议相同)。
    【解决方案2】:

    这应该可以工作...

    Enum.sort(keyword_list, fn {k, _v} -> k end)
    

    【讨论】:

    • 嗨@potibas 我怎样才能在这里传递我想要对条目进行排序的键列表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 2017-03-05
    • 1970-01-01
    • 2021-11-13
    相关资源
    最近更新 更多