在Elixir中,我想创建一个可变数量的列表,这些列表的开头相同。我想以编程方式命名,例如
LIST1 = 1,2,3
LIST2 = 1,2,3等
我正在尝试的编码方法如下。这可以在Elixir中完成还是禁止使用?
n = IO.gets("Enter number of lists: ") |> String.trim_trailing
n = String.to_integer(n)
generatelistnames(n,1)
def generatelistnames(0,0), do: nil
def generatelistnames(numberofnodes,1) do
if (numberofnodes < 1) do
loop(0,1)
else
listname = "LIST"+Integer.to_string(numberofnodes)
listname = [1,2,3]
IO.puts "#{listname}"
loop(numberofnodes-1,1)
end
end
答案 0 :(得分:2)
您的问题实质上是关于生成列表并为这些列表提供一些命名。我假设这些列表的命名纯粹是与UI相关的,例如用户输入一个数字,创建一些列表,每个列表都打印出一个名称。
在这种情况下,一般来说,编程时需要将您的疑虑分开。生成列表存在问题,并且存在UI的问题。
在你的伪代码方法中,你试图同时解决这两个问题,而你可能会考虑这样的事情:
defmodule MyList do
def generate(amount) do
1..amount
|> Enum.map(fn e ->
# Keep track of the number and produce a list. Currently the list produced is simply hardcoded, but you can modify in any way you want.
{e, produce_a_list()}
end)
end
def run do
3
|> generate()
|> output()
end
defp output(lists) do
lists
|> Enum.each(fn {nr, a_list} ->
IO.inspect("LIST_#{nr}: ")
IO.inspect(a_list)
end)
end
# Replace in any way you want to create the list, randomly or by some previously generated list ....
defp produce_a_list do
[1,2,3,4]
end
end
要查看示例,您可以像这样运行它:
MyList.run
这将使你像这样:
"LIST_1"
[1, 2, 3, 4]
"LIST_2"
[1, 2, 3, 4]
"LIST_3"
[1, 2, 3, 4]