Elixir 的 集合操作问题

发布于 2022-09-11 20:15:26 字数 928 浏览 12 评论 0

Elixir小白一个。话不多说,直入主题。
对于下面的page中的entries,如何优雅的插入:obj_c => "obj_c"而不适用中间变量呢。

page = %{
    :page_size => "1",
    :page_total=> "10",
    :entries => [
        %{
            :obj_a => "obj_a",
            :obj_b => "obj_b"
            # 这里要插入:obj_c => "obj_c"
        },
        %{
            :obj_a => "obj_a",
            :obj_b => "obj_b",
            # 这里要插入:obj_c => "obj_c"
        }
    ]
}

使用中间变量的方法

entry_new = Enum.map(
    page.entries,
    fn x -> Map.put(x, :obj_c, "obj_c") end
)
page = Map.put(page, :entries, entry_new)

不适用中间变量的方法

# 尝试一 不报错。但是page没有改变。这是为什么呢
page.entries 
|> Enum.map(fn x -> Map.put(x, :obj_c, "obj_c" end)
# 尝试二 直接报错。page.entries 这里会被认为是函数,好奇怪。
page.entries = page.entries 
|> Enum.map(fn x -> Map.put(x, :obj_c, "obj_c" end)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美羊羊 2022-09-18 20:15:26

你好, 你这个使用中间变量的方法也是不能编译的吧...

使用中间变量应该这么写:

  def test() do
    page = %{
      :page_size => "1",
      :page_total => "10",
      :entries => [
        %{
          :obj_a => "obj_a",
          :obj_b => "obj_b"
          # 这里要插入:obj_c => "obj_c"
        },
        %{
          :obj_a => "obj_a",
          :obj_b => "obj_b"
          # 这里要插入:obj_c => "obj_c"
        }
      ]
    }

    page |> Map.get(:entries) |> IO.inspect()

    entry_new =
      page
      |> Map.get(:entries)
      |> Enum.map(fn x -> Map.put(x, :obj_c, "obj_c") end)

    page = Map.put(page, :entries, entry_new)

    page |> IO.inspect()
  end

不使用中间变量的方法:

  def test() do
    page = %{
      :page_size => "1",
      :page_total => "10",
      :entries => [
        %{
          :obj_a => "obj_a",
          :obj_b => "obj_b"
          # 这里要插入:obj_c => "obj_c"
        },
        %{
          :obj_a => "obj_a",
          :obj_b => "obj_b"
          # 这里要插入:obj_c => "obj_c"
        }
      ]
    }

    page |> Map.get(:entries) |> IO.inspect()

    page =
      page
      |> Map.put(
        :entries,
        page
        |> Map.get(:entries)
        |> Enum.map(fn x -> Map.put(x, :obj_c, "obj_c") end)
      )

    page |> IO.inspect()
  end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文