Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用structs Elixir更新列表_Elixir_Phoenix Framework - Fatal编程技术网

使用structs Elixir更新列表

使用structs Elixir更新列表,elixir,phoenix-framework,Elixir,Phoenix Framework,我有一个对象 %{ shares: [] } 我想通过Enum将结构%Cs{name:“Junaid1”},%Cs{name:“Junaid2”}添加到列表中。每个或映射都可以这样做吗 好的,再简单一点,我再次更新问题 Enum.each(email_array, fn (email) -> with {:found_user, sharee} <- ensure_user(email) do case CameraShare.create_sha

我有一个对象

%{
  shares: []
}
我想通过
Enum将结构
%Cs{name:“Junaid1”}
%Cs{name:“Junaid2”}
添加到列表中。每个
映射都可以这样做吗

好的,再简单一点,我再次更新问题

 Enum.each(email_array, fn (email) ->
    with {:found_user, sharee} <- ensure_user(email)
    do
      case CameraShare.create_share(camera, sharee, caller, params["rights"], params["message"]) do
        {:ok, camera_share} ->
           #Add camera_share to list
        {:error, changeset} ->
          #Add error to a list
      end
    else
      {:not_found, email} ->
        case CameraShareRequest.create_share_request(camera, email, caller, params["rights"], params["message"]) do
          {:ok, camera_share_request} ->
            #Add camera_share to list
          {:error, changeset} ->
            #Add error to list
        end
    end
  end)

其中,由于每个共享的类型都是
%CameraShare{{uuuuu meta}:{u35; exto.Schema.Metadata}

您可以创建如下简单方法:

def add_share(%{shares: shares} = map, share) do
  %{ map | shares: [share | shares] }
end
并调用它将项目添加到地图中的列表:

%{shares: []}
|> add_share(%Cs{name: "Junaid1"})
|> add_share(%Cs{name: "Junaid2"})
结果:

%{shares: [%Cs{name: "Junaid2"}, %Cs{name: "Junaid1"}]}

您可以创建如下简单方法:

def add_share(%{shares: shares} = map, share) do
  %{ map | shares: [share | shares] }
end
并调用它将项目添加到地图中的列表:

%{shares: []}
|> add_share(%Cs{name: "Junaid1"})
|> add_share(%Cs{name: "Junaid2"})
结果:

%{shares: [%Cs{name: "Junaid2"}, %Cs{name: "Junaid1"}]}
Straigt列表串联 理解力
Enum.into

FWIW:

将元素添加到现有列表中:

list = []
element = 42

list1 = [element | list]
#⇒ [42]
list2 = [element | list1]
#⇒ [42, 42]

对更新问题的答复(简化):

Enum.reduce(email_数组,{[],[]},fn
电子邮件,{共享,更改}=\u acc->
与{:found_user,share}
{[camera_share | shares],changes}
{:错误,变更集}->
{共享,[变更集|变更]}
结束
其他的
#基本相同
#确保所有分支都返回一个acumulator
结束
(完)
上面将返回一个元组
{shares,changes}
,您可以将其分配给任何对象

Straigt列表串联 理解力
Enum.into

FWIW:

将元素添加到现有列表中:

list = []
element = 42

list1 = [element | list]
#⇒ [42]
list2 = [element | list1]
#⇒ [42, 42]

对更新问题的答复(简化):

Enum.reduce(email_数组,{[],[]},fn
电子邮件,{共享,更改}=\u acc->
与{:found_user,share}
{[camera_share | shares],changes}
{:错误,变更集}->
{共享,[变更集|变更]}
结束
其他的
#基本相同
#确保所有分支都返回一个acumulator
结束
(完)

上面将返回一个元组
{shares,changes}
,您可以将其分配给任何对象。

到目前为止您尝试了什么,目前得到了什么结果?好的,谢谢。我又更新了一次。。以一种非常简单的方式,你可以理解它,到目前为止你尝试了什么,你现在得到了什么结果?好的,谢谢。我又更新了一次。。用一种非常简单的方法,在你能真正理解它的地方,问题就从这一点开始
[%{name:“Junaid1”},%{name:“Junaid2”}]
如何将所有这些值放在列表中?由于在一次操作之后,用户将获得一个
%{name:“Junaid1”}
,问题是如何将所有这些保存在一个列表中
add_shares=[%{name:“Junaid1”},%{name:“Junaid2”}]
目标是实现此状态。。如何将这些值保存在一个枚举中。每个值或映射感谢您的回答,非常感谢。但是我已经更新了。。再解释一下我想要达到的目标。这就是我目前所处的困境。
[%{name:“Junaid1”},%{name:“Junaid2”}]
如何做到这一点正如你所看到的,一切都在一个循环中,我想把所有的相机共享和错误放在一起实际上,问题就从这一点开始了
[%{name:“Junaid1”},%{name:“Junaid2”}]
如何将所有这些值放在列表中?由于在一次操作之后,用户将获得一个
%{name:“Junaid1”}
,问题是如何将所有这些保存在一个列表中
add_shares=[%{name:“Junaid1”},%{name:“Junaid2”}]
目标是实现此状态。。如何将这些值保存在一个枚举中。每个值或映射感谢您的回答,非常感谢。但是我已经更新了。。再解释一下我想要达到的目标。这就是我目前所处的困境。
[%{name:“Junaid1”},%{name:“Junaid2”}]
如何做到这一点,正如你所看到的,一切都在一个each循环中,我希望所有的相机共享和错误都在一起
%{map | shares: Enum.into(add_shares, map[:shares], & &1)}
list = []
element = 42

list1 = [element | list]
#⇒ [42]
list2 = [element | list1]
#⇒ [42, 42]
Enum.reduce(email_array, {[], []}, fn
  email, {shares, changes} = _acc ->
    with {:found_user, sharee} <- ensure_user(email) do
      case :camera_share do
        {:ok, camera_share} ->
           {[camera_share | shares], changes}
        {:error, changeset} ->
           {shares, [changeset | changes]}
      end
    else
      # basically the same
      # make sure ALL branches return an acumulator
    end
  end)