Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Elixir:将列表转换为具有整数键的映射_List_Dictionary_Zip_Elixir - Fatal编程技术网

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

List Elixir:将列表转换为具有整数键的映射,list,dictionary,zip,elixir,List,Dictionary,Zip,Elixir,如何从列表中选择:~w[狗-猫-羊] 对于具有整数键的映射:%{1=>“dog”,2=>“cat”,3=>“sheep”} 我的尝试: 有更简单的方法吗?这里有一个单行程序版本: 对于{v,k}Enum.with_索引,到:%{},do:{k+1,v} 这与模块中的可重用函数是一样的: defmodule示例do 定义到索引映射(列表,偏移量\\0) 什么时候是列表(列表) 并且是_整数(偏移量), do:对于{v,k}Enum.with_索引, 进入:%{}, do:{k+偏移量,v} 结束

如何从列表中选择:
~w[狗-猫-羊]

对于具有整数键的映射:
%{1=>“dog”,2=>“cat”,3=>“sheep”}

我的尝试:


有更简单的方法吗?

这里有一个单行程序版本:

对于{v,k}Enum.with_索引,到:%{},do:{k+1,v}
这与模块中的可重用函数是一样的:

defmodule示例do
定义到索引映射(列表,偏移量\\0)
什么时候是列表(列表)
并且是_整数(偏移量),
do:对于{v,k}Enum.with_索引,
进入:%{},
do:{k+偏移量,v}
结束
用法示例:

iex>list=~w[狗-猫-羊]
[“狗”、“猫”、“羊”]
iex>示例。到索引图(列表)
%{0=>“狗”,1=>“猫”,2=>“羊”}
次要更新:下面显示了一个不太简洁但性能更高的版本(大约快2倍)

defmodule示例do
定义到索引映射(列表,偏移量\\0)
什么时候是列表(列表)
并且是_整数(偏移量),
do:to_索引_映射(列表,偏移量,[])
defp到索引地图([],[k],acc),
do::映射。从列表(acc)
defp到索引地图([v | vs],k,acc),
do:to_索引_映射(vs,k+1,[{k,v}| acc])
结束

看起来很适合添加到Enum中。如果我们能在你的to_索引地图上设置一个偏移量也会很好function@CharlesO我想我在您提交建议编辑的同时添加了偏移选项,但我认为我没有正确接受您的编辑:-/谢谢您的建议!请告诉我为什么第二个版本的性能更好?@CharlesO我怀疑是因为第一个实现在键/值对上至少循环了3次:(1)(2)用于理解(3)。第二个实现循环两次:(1)尾部调用递归以构建列表(2),这是一个。
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"}