在我的应用中,我有一个列表,其中包含id
和parentId
彼此相关。拥有parentId : 0
的地图应该是最高的父母,其次是其他孩子。
var _maps = [
{
"id": 31,
"parentId": 4
},
{
"id": 34,
"parentId": 4
},
{
"id": 39,
"parentId": 22
},
{
"id": 29,
"parentId": 3
},
{
"id": 6,
"parentId": 0
},
{
"id": 21,
"parentId": 6
},
{
"id": 27,
"parentId": 3
},
{
"id": 28,
"parentId": 3
},
{
"id": 32,
"parentId": 4
},
{
"id": 33,
"parentId": 4
},
{
"id": 38,
"parentId": 20
},
{
"id": 30,
"parentId": 3
},
{
"id": 3,
"parentId": 0
},
{
"id": 35,
"parentId": 20
},
{
"id": 385,
"parentId": 3
},
{
"id": 458,
"parentId": 0
},
{
"id": 40,
"parentId": 22
},
{
"id": 63,
"parentId": 6
},
{
"id": 37,
"parentId": 20
},
{
"id": 41,
"parentId": 22
},
{
"id": 22,
"parentId": 6
},
{
"id": 36,
"parentId": 20
},
{
"id": 11,
"parentId": 6
},
{
"id": 20,
"parentId": 6
},
{
"id": 4,
"parentId": 0
}
];
我想这样做,它将被转换成这样的树,这样我就可以轻松地从父级访问子级。
{6: {21: {}, 63: {}, 22: {39: {}, 40: {}, 41: {}}, 11: {}, 20: {}} ...
我的方法在某种程度上只是抓住了树的第一个深度,但后来却没有。我正在考虑使用递归,但不知道如何开始。
Map _convertToTree(List maps) {
Map _parentDict = {};
maps.forEach((item) {
if(item["parentId"] == 0) {
_parentDict[item['id']] = {};
}
});
maps.forEach((item) {
if(_parentDict.keys.contains(item["parentId"])) {
_parentDict.keys.forEach((dictItem) {
if(item['parentId'] == dictItem) {
_parentDict[dictItem][item['id']] = {};
}
});
}
});
return _parentDict;
}
void main() {
var _dict = _convertToTree(_maps);
print(_dict);
}
结果:{6: {21: {}, 63: {}, 22: {}, 11: {}, 20: {}}, 3: {29: {}, 27: {}, 28: {}, 30: {}, 385: {}}, 458: {}, 4: {31: {}, 34: {}, 32: {}, 33: {}}}
是否有关于如何解决此问题的建议?谢谢!