【问题标题】:Add new element to list using for使用 for 将新元素添加到列表中
【发布时间】:2018-09-16 23:47:00
【问题描述】:

我不知道如何在长生不老药中最好地解决这个问题,但给了一个数字来打印它的序列,就像这样[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

n = 10
list = []
for i <- 0..n - 1, do: list = list ++ [i]
IO.inspect list

上面的代码返回给我这个:

warning: variable "list" is unused
    solution.ex:8

** (UndefinedFunctionError) function Solution.main/0 is undefined or private
    Solution.main()
    (elixir) lib/code.ex:677: Code.require_file/2

【问题讨论】:

    标签: functional-programming elixir


    【解决方案1】:

    Elixir 的变量的作用域是它们所在的“块”。让我们看看你的代码是什么样子的。

    n = 10
    outer_list = []
    for i <- 0..n - 1, do: inner_list = outer_list ++ [i]
    IO.inspect outer_list
    

    因此inner_list 的值将始终为[] ++ [i],因为outer_list 没有被更改。当您将 inner_listouter_list 都命名为 list 时,您正在隐藏变量。这意味着它具有相同的名称,但基于范围的值不同。您还会收到一条警告,指出 inner_list 实际上并未在任何地方使用。

    你可能想做的是

    n = 10
    list = for i <- 0..n - 1, do: i
    IO.inspect list
    

    不过,使用Enum.to_list/1 可能会更好地为您服务。

    n = 10
    list = Enum.to_list(0..n-1)
    IO.inspect list
    

    【讨论】:

      【解决方案2】:

      尝试使用list comprehensions 喜欢:

      list = for i <- 0..(n - 1) do i end
      IO.inspect list
      

      【讨论】:

        【解决方案3】:

        虽然@neisc 给出了一个很好的答案,但我宁愿这样做:

        list = list ++ (for i <- 0..(n - 1) do i end)
        

        在原始列表中添加一些内容,同时保留它可能已经包含的数据。

        【讨论】:

          【解决方案4】:

          我会再添加一个。

          经典Enum.map/2

          n = 10
          list = Enum.map(0..n-1, &(&1))
          IO.inspect list
          

          不像Enum.to_list/1那么简洁,但更通用一些。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-02
            • 1970-01-01
            • 2020-08-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-06-16
            相关资源
            最近更新 更多