在Elixir中,如何将范围转换为列表?

epo*_*ter 47 elixir

我可以声明一个范围如下:

range = 1..10
Run Code Online (Sandbox Code Playgroud)

有没有办法将范围转换为列表?

Chr*_*ord 99

Enum.to_list/1 正是你要找的:

iex(3)> Enum.to_list 1..10
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)


Pat*_*ity 16

将枚举转换为特定可收集项的通用方法是Enum.into:

Enum.into 1..10, []
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

您还可以将转换函数作为第三个参数传递:

Enum.into 1..10, %{}, &({&1, &1})
#=> %{1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,不知道第三个论点,应该是有用的. (3认同)

kon*_*ole 9

使用 Enum.map/2

range = 1..10
Enum.map(range, fn(x) -> x end)
Run Code Online (Sandbox Code Playgroud)

要么

Enum.map(range, &(&1))
Run Code Online (Sandbox Code Playgroud)


Pla*_*mer 5

使用管道运算符

1..10 |> Enum.to_list

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

然后你可以对其应用进一步的转换,例如

1..10 |> Enum.to_list |> Enum.sum

55
Run Code Online (Sandbox Code Playgroud)