如何获取elixir中列表元素的索引?

nac*_*ido 0 indexing element list elixir

我有

>> list = ["a","b","c"]
Run Code Online (Sandbox Code Playgroud)

我需要获取元素的索引并创建一个新列表

>> list_2 = [[1,"a"], [2,"b"], [3,c]]
Run Code Online (Sandbox Code Playgroud)

创建我使用的新列表

lista = Enum.flat_map(list, fn x -> [index,x] end)
Run Code Online (Sandbox Code Playgroud)

但我找不到类似获取“索引”值的函数

Ale*_*kin 7

Enum.zip/2是你的朋友吗?

\n\n
list = ~w[a b c]\n#\xe2\x87\x92 ["a", "b", "c"]\n\nlist_2 = Enum.zip(1..3, list)\n#\xe2\x87\x92 [{1, "a"}, {2, "b"}, {3, "c"}]\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,如果预先未知尺寸,您可能会

\n\n
Enum.zip(Stream.iterate(1, & &1 + 1), list)\n#\xe2\x87\x92 [{1, "a"}, {2, "b"}, {3, "c"}]\n
Run Code Online (Sandbox Code Playgroud)\n\n

要获取列表而不是元组,只需映射结果

\n\n
1\n|> Stream.iterate(& &1+1)\n|> Enum.zip(list)\n|> Enum.map(&Tuple.to_list/1)\n#\xe2\x87\x92 [[1, "a"], [2, "b"], [3, "c"]]\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

另一种方法是使用Enum.with_index/1

\n\n
list\n|> Enum.with_index(1)\n|> Enum.map(fn {e, i} -> [i, e] end)\n#\xe2\x87\x92 [[1, "a"], [2, "b"], [3, "c"]]\n
Run Code Online (Sandbox Code Playgroud)\n


Gav*_*aff 6

list = ["a","b","c"]
list_2 = Enum.with_index(list)
Run Code Online (Sandbox Code Playgroud)

[{"a", 0}, {"b", 1}, {"c", 2}]
Run Code Online (Sandbox Code Playgroud)