我有一个地图列表,我正在努力构建一个html树,单击一个元素后,显示其子列表。做这件事的最好方法是什么?
例如:我们有一份地图列表:[%Person{name: "name1", id: 1, parent_id: nil}, %Person{name: "name2", id: 2, parent_id: 1},%Person{name: "name3", id: 3, parent_id: 2}]
我想得到这样的东西:
name1 ↓
name2 ↓
name 3
我将感激你的帮助!这可能是一个棘手的问题,因为如果你需要遍历到树的最后一个叶子,你必须遍历列表很多次(我会让别人告诉你确切的O(n))。
然而,如果你只需要显示你的问题所暗示的直接孩子,Enum.filter/2
是你的朋友。您可以编写一个函数,接受您希望看到的人的列表和孩子的父母的id。
例如,如果您希望查找根目录(parent_id = nil
所在位置)的所有人员:
iex> parent_id = nil
nil
iex> Enum.filter(people, fn %{parent_id: id} -> id == parent_id end)
[%{id: 1, name: "name1", parent_id: nil}]