将项目添加到列表中

时间:2017-12-11 10:46:01

标签: list elixir

我不明白。我想将一个项目添加到列表中。但它没有用。这是我的代码:

  def put_viewed(items, user_id) do
  lll = []
  Enum.each items, fn item ->
    viewed = check_viewed(item.id, user_id)
    new_item = Map.put(item, :viewed, viewed)
    Enum.concat(lll, [new_item])
  end
  IO.inspect lll
end

我总是得到[]作为结果。与lll ++ [new_item]

相同

2 个答案:

答案 0 :(得分:4)

应该这样做:

 def put_viewed(items, user_id) do
   Enum.reduce(items, [], fn(item, acc) ->
     viewed = check_viewed(item.id, user_id)
     new_item = Map.put(item, :viewed, viewed)
     [new_item | acc]
   end)
 end

你不能在Elixir中改变变量,你必须使用功能样式的东西,比如还原。

答案 1 :(得分:4)

如果您只需要处理项目列表,可以使用@JustMichael答案或只使用简单的Enum.map:

def put_viewed(items, user_id) do
  Enum.map(items, fn item ->
    viewed = check_viewed(item.id, user_id)
    Map.put(item, :viewed, viewed)
  end )
end