"cat", 3=> "sheep" 我的尝试: iex(1)> list = ~w[do-6ren">
gpt4 book ai didi

list - Elixir:将列表转换为具有整数键的映射

转载 作者:行者123 更新时间:2023-12-01 11:29:29 24 4
gpt4 key购买 nike

如何从一个列表中去:~w[dog cat sheep]

到具有整数键的映射:%{1=> "dog", 2=> "cat", 3=> "sheep"

我的尝试:

iex(1)> list = ~w[dog cat sheep]
["dog", "cat", "sheep"]
iex(2)> list |> Enum.with_index|>Enum.map(fn({a,b})->{b+1,a} end)|> Enum.into %{}

%{1=> "dog", 2=> "cat", 3=> "sheep"}

有没有更简单的方法?

最佳答案

这是单行版本:

for {v, k} <- ~w[dog cat sheep] |> Enum.with_index, into: %{}, do: {k+1, v}

这与模块中的可重用函数相同:

defmodule Example do
def to_indexed_map(list, offset \\ 0)
when is_list(list)
and is_integer(offset),
do: for {v, k} <- list |> Enum.with_index,
into: %{},
do: {k+offset, v}
end

示例用法:

iex> list = ~w[dog cat sheep]
["dog", "cat", "sheep"]
iex> Example.to_indexed_map(list)
%{0 => "dog", 1 => "cat", 2 => "sheep"}

次要更新:一个不太简洁但性能更高的版本(大约快 2 倍)如下所示。

defmodule Example do
def to_indexed_map(list, offset \\ 0)
when is_list(list)
and is_integer(offset),
do: to_indexed_map(list, offset, [])

defp to_indexed_map([], _k, acc),
do: :maps.from_list(acc)
defp to_indexed_map([v | vs], k, acc),
do: to_indexed_map(vs, k+1, [{k, v} | acc])
end

关于list - Elixir:将列表转换为具有整数键的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34076595/

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