Elixir 过滤函数

刚用这个语言,还是有很多地方不会使用。
记录一下,刚刚领导给指导的一个函数,Enum.filter(fn user -> user.id not in list_user_id end)
这是我刚刚用过的函数。
情景是这样的,一个用户下拉列表,添加一条用户信息,下拉类表中减少有个用户名称。
代码如下:
前端页面:

 <div class="col-md-7">
   <%= select nil, :user_id, users(@project.id), id: "user_id", class: "form-control" %>  
   <input type="hidden" id="pro_id" value="<%= @project.id %>">
 </div>

视图函数:

  def users(project_id) do
    list_user_id = Base.list_members(project_id)
    |> Enum.map(&(&1.user_id))
    System.list_users()
    |> Enum.map(&{&1.name, &1.id})
    |> Enum.filter(fn {name, id} -> id not in list_user_id end)
  end

简单介绍下 Enum.filter()函数

Enum.filter(fn {name, id} -> id not in list_user_id end)
// filter过滤函数
// fn 开始格式固定的
// {name, id} -> id  这个位置是条件,因为在Enum.map(&{&1.name, &1.id})一句定义了,需要的是id字段,这里也是个集合
// not in 不存在其中 (in 就是在其中)
// list_user_id 这个是 集合,id 与 集合中的值

变换一下:
结果是一样的

 def users(project_id) do
    list_user_id = Base.list_members(project_id)
    |> Enum.map(&(&1.user_id))
    user = System.list_users()
    |> Enum.map(&(&1.id))
    |> Enum.filter(fn user -> user.id not in list_user_id end)
  end

猜你喜欢

转载自blog.csdn.net/liguangix/article/details/81560474