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
Elixir 进入深度嵌套的映射和列表_Elixir - Fatal编程技术网

Elixir 进入深度嵌套的映射和列表

Elixir 进入深度嵌套的映射和列表,elixir,Elixir,我有一张这样的地图: %{ "conferences" => [ %{ "alias" => "EASTERN", "divisions" => [ %{ "alias" => "SOUTHEAST", "id" => "54dc7348-c1d2-40d8-88b3-c4c0138e085d", "name" => "Southeast",

我有一张这样的地图:

%{
  "conferences" => [
    %{
      "alias" => "EASTERN",
      "divisions" => [
        %{
          "alias" => "SOUTHEAST",
          "id" => "54dc7348-c1d2-40d8-88b3-c4c0138e085d",
          "name" => "Southeast",
          "teams" => [
            %{
              "alias" => "WAS",
              "id" => "583ec8d4-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Washington",
              "name" => "Wizards",
              "reference" => "1610612764",
              "sr_id" => "sr:team:3431",
              "venue" => %{
                "address" => "601 F St. N.W.",
                "capacity" => 20356,
                "city" => "Washington",
                "country" => "USA",
                "id" => "f62d5b49-d646-56e9-ba60-a875a00830f8",
                "name" => "Capital One Arena",
                "state" => "DC",
                "zip" => "20004"
              }
            }
          ]
        },
      ],
      "id" => "3960cfac-7361-4b30-bc25-8d393de6f62f",
      "name" => "EASTERN CONFERENCE"
    },
    %{
      "alias" => "WESTERN",
      "divisions" => [
        %{
          "alias" => "NORTHWEST",
          "id" => "12bf14ba-eb16-4c6f-8275-e801b6947c1e",
          "name" => "Northwest",
          "teams" => [
            %{
              "alias" => "DEN",
              "id" => "583ed102-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Denver",
              "name" => "Nuggets",
              "reference" => "1610612743",
              "sr_id" => "sr:team:3417",
              "venue" => %{
                "address" => "1000 Chopper Circle",
                "capacity" => 19155,
                "city" => "Denver",
                "country" => "USA",
                "id" => "1a28ef88-76c9-5bcc-b4ee-51d30ca98f4f",
                "name" => "Pepsi Center",
                "sr_id" => "sr:venue:5976",
                "state" => "CO",
                "zip" => "80204"
              }
            }
          ]
        }
      ],
      "id" => "7fe7e212-de01-4f8f-a31d-b9f0a95731e3",
      "name" => "WESTERN CONFERENCE"
    }
  ],
  "league" => %{
    "alias" => "NBA",
    "id" => "4353138d-4c22-4396-95d8-5f587d2df25c",
    "name" => "NBA"
  }
}
ids =
  for conference <- data["conferences"],
      division <- conference["divisions"],
      team <- division["teams"],
      do: team["id"]

IO.inspect ids
如何仅提取
团队ID
?因此,我最终得到了一个类似以下内容的列表:<代码>=>[“583ec8d4-fb46-11e1-82cb-f4ce4684ea4c”,“583ed102-fb46-11e1-82cb-f4ce4684ea4c”]

当前尝试: 如果
数据
表示上述地图

conferences = get_in(data, ["conferences"])
divisions = Enum.map(conferences, fn(c) -> c["divisions"] end)
Enum.map(divisions, fn(d) -> d["teams"] end)
错误消息:
问题是
c[“部门”]
本身就是一个列表,因此您最终会得到
部门中的列表列表,这使得最后一个
Enum.map
失败,因为您试图访问列表的
[“团队”]
。如果要处理所有会议中的所有分区,只需将第二行从
Enum.map
更改为
Enum.flat\u map

divisions = Enum.flat_map(conferences, fn(c) -> c["divisions"] end)
此外,我会使用
for
编写整个过程,如下所示:

%{
  "conferences" => [
    %{
      "alias" => "EASTERN",
      "divisions" => [
        %{
          "alias" => "SOUTHEAST",
          "id" => "54dc7348-c1d2-40d8-88b3-c4c0138e085d",
          "name" => "Southeast",
          "teams" => [
            %{
              "alias" => "WAS",
              "id" => "583ec8d4-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Washington",
              "name" => "Wizards",
              "reference" => "1610612764",
              "sr_id" => "sr:team:3431",
              "venue" => %{
                "address" => "601 F St. N.W.",
                "capacity" => 20356,
                "city" => "Washington",
                "country" => "USA",
                "id" => "f62d5b49-d646-56e9-ba60-a875a00830f8",
                "name" => "Capital One Arena",
                "state" => "DC",
                "zip" => "20004"
              }
            }
          ]
        },
      ],
      "id" => "3960cfac-7361-4b30-bc25-8d393de6f62f",
      "name" => "EASTERN CONFERENCE"
    },
    %{
      "alias" => "WESTERN",
      "divisions" => [
        %{
          "alias" => "NORTHWEST",
          "id" => "12bf14ba-eb16-4c6f-8275-e801b6947c1e",
          "name" => "Northwest",
          "teams" => [
            %{
              "alias" => "DEN",
              "id" => "583ed102-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Denver",
              "name" => "Nuggets",
              "reference" => "1610612743",
              "sr_id" => "sr:team:3417",
              "venue" => %{
                "address" => "1000 Chopper Circle",
                "capacity" => 19155,
                "city" => "Denver",
                "country" => "USA",
                "id" => "1a28ef88-76c9-5bcc-b4ee-51d30ca98f4f",
                "name" => "Pepsi Center",
                "sr_id" => "sr:venue:5976",
                "state" => "CO",
                "zip" => "80204"
              }
            }
          ]
        }
      ],
      "id" => "7fe7e212-de01-4f8f-a31d-b9f0a95731e3",
      "name" => "WESTERN CONFERENCE"
    }
  ],
  "league" => %{
    "alias" => "NBA",
    "id" => "4353138d-4c22-4396-95d8-5f587d2df25c",
    "name" => "NBA"
  }
}
ids =
  for conference <- data["conferences"],
      division <- conference["divisions"],
      team <- division["teams"],
      do: team["id"]

IO.inspect ids

问题是
c[“部门”]
本身就是一个列表,因此您最终会得到
部门中的列表列表,这使得最后一个
Enum.map
失败,因为您试图访问列表的
[“团队”]
。如果要处理所有会议中的所有分区,只需将第二行从
Enum.map
更改为
Enum.flat\u map

divisions = Enum.flat_map(conferences, fn(c) -> c["divisions"] end)
此外,我会使用
for
编写整个过程,如下所示:

%{
  "conferences" => [
    %{
      "alias" => "EASTERN",
      "divisions" => [
        %{
          "alias" => "SOUTHEAST",
          "id" => "54dc7348-c1d2-40d8-88b3-c4c0138e085d",
          "name" => "Southeast",
          "teams" => [
            %{
              "alias" => "WAS",
              "id" => "583ec8d4-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Washington",
              "name" => "Wizards",
              "reference" => "1610612764",
              "sr_id" => "sr:team:3431",
              "venue" => %{
                "address" => "601 F St. N.W.",
                "capacity" => 20356,
                "city" => "Washington",
                "country" => "USA",
                "id" => "f62d5b49-d646-56e9-ba60-a875a00830f8",
                "name" => "Capital One Arena",
                "state" => "DC",
                "zip" => "20004"
              }
            }
          ]
        },
      ],
      "id" => "3960cfac-7361-4b30-bc25-8d393de6f62f",
      "name" => "EASTERN CONFERENCE"
    },
    %{
      "alias" => "WESTERN",
      "divisions" => [
        %{
          "alias" => "NORTHWEST",
          "id" => "12bf14ba-eb16-4c6f-8275-e801b6947c1e",
          "name" => "Northwest",
          "teams" => [
            %{
              "alias" => "DEN",
              "id" => "583ed102-fb46-11e1-82cb-f4ce4684ea4c",
              "market" => "Denver",
              "name" => "Nuggets",
              "reference" => "1610612743",
              "sr_id" => "sr:team:3417",
              "venue" => %{
                "address" => "1000 Chopper Circle",
                "capacity" => 19155,
                "city" => "Denver",
                "country" => "USA",
                "id" => "1a28ef88-76c9-5bcc-b4ee-51d30ca98f4f",
                "name" => "Pepsi Center",
                "sr_id" => "sr:venue:5976",
                "state" => "CO",
                "zip" => "80204"
              }
            }
          ]
        }
      ],
      "id" => "7fe7e212-de01-4f8f-a31d-b9f0a95731e3",
      "name" => "WESTERN CONFERENCE"
    }
  ],
  "league" => %{
    "alias" => "NBA",
    "id" => "4353138d-4c22-4396-95d8-5f587d2df25c",
    "name" => "NBA"
  }
}
ids =
  for conference <- data["conferences"],
      division <- conference["divisions"],
      team <- division["teams"],
      do: team["id"]

IO.inspect ids

虽然@Dogbert的答案通常都很好,也非常有效,但为了未来的访问者,我会发布另一种方法(在这种特殊情况下,它比使用理解的方法更冗长,一般来说更糟糕)

这个正在使用

数据
|>上车([
访问密钥(“会议”),
Access.all(),
访问键(“分区”),
Access.all(),
访问。关键(“团队”),
Access.all(),
访问密钥(“id”)
])
|>列表。展平
#⇒[“583ec8d4-fb46-11e1-82cb-f4ce4684ea4c”,
#“583ed102-fb46-11e1-82cb-f4ce4684ea4c”]

虽然@Dogbert的答案通常都很好而且非常有效,但为了未来的访问者,我会发布另一种方法(在这种特殊情况下,它比使用理解的方法更详细,而且通常更糟糕。)

这个正在使用

数据
|>上车([
访问密钥(“会议”),
Access.all(),
访问键(“分区”),
Access.all(),
访问。关键(“团队”),
Access.all(),
访问密钥(“id”)
])
|>列表。展平
#⇒[“583ec8d4-fb46-11e1-82cb-f4ce4684ea4c”,
#“583ed102-fb46-11e1-82cb-f4ce4684ea4c”]