【问题标题】:How to add an item to list in cycle in Elixir/Phoenix如何在 Elixir/Phoenix 中循环添加项目
【发布时间】:2017-06-13 15:34:52
【问题描述】:

我正在研究 Elixir/Phoenix,我面前有一个任务。我需要循环过滤数据库中的结果。像这样的:

user = Repo.get_by(User, api_token: token)
rooms = Repo.all(Room)
result = []
if !Enum.empty?(rooms) do
  Enum.each rooms, fn room ->
    users = Poison.decode!(room.users)
    if Enum.member?(users, user.id) do
       result = result ++ [room]
    end
  end
end
json(conn, %{"rooms" => result})

但是这种情况不允许我将项目附加到列表中,为什么?因为这是一种函数式语言... 有没有办法将项目追加到循环列表中?

哦,是的,也许你会问我“为什么你只是不通过用户 ID 从数据库中获取对象?”我会说 room.users 存储以字符串编码的 json 数组

【问题讨论】:

    标签: elixir phoenix-framework elixir-poison


    【解决方案1】:

    当您想从列表中选择一些项目时,您可以使用Enum.filter/2。您也可以使用in 运算符代替Enum.member?/2

    user = Repo.get_by(User, api_token: token)
    rooms = Repo.all(Room)
    result = Enum.filter(rooms, fn room ->
      user.id in Poison.decode!(room.users)
    end)
    

    您也可以使用for 代替Enum.filter/2

    result = for room <- rooms, user.id in Poison.decode!(room.users), do: room
    

    【讨论】:

    • 谢谢。这是工作,但真的有办法如何在一个循环中过滤它吗?在我看来,这并不适用于所有情况
    • 如果您想在遍历列表时对变量进行任意更改,可以使用Enum.reduce/3。以下是我使用Enum.reduce/3的一些答案:stackoverflow.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2019-11-05
    • 2017-10-21
    • 2016-05-15
    • 1970-01-01
    • 2020-07-18
    • 2015-07-07
    相关资源
    最近更新 更多