toTreeMap method
Converts a DynamicMap with a key of String in the path structure to a DynamicMap in the tree structure.
Keys are divided by /
and assigned to keys in the respective tree structure.
The value
of DynamicMap is stored at the end of the node.
keyBuilder
can be specified to convert keys in each tree structure.
If the folder name for each path is empty, that folder will be skipped.
"/aaa//ccc" => "/aaa/ccc"
パス構造のStringのキーを持つDynamicMapをツリー構造のDynamicMapに変換します。
キーは/
で分割され、それぞれのツリー構造のキーに割り当てられます。
ノードの最後にDynamicMapのvalue
が格納されます。
keyBuilder
を指定すると各ツリー構造のキーを変換することが可能です。
各パスのフォルダ名が空になった場合、そのフォルダはスキップされます。
"/aaa//ccc" => "/aaa/ccc"
final test = {
"/aaa/bbb/ccc": "ccc",
"/aaa/ddd": "ddd",
};
final tree = test.toTreeMap();
// {
// "aaa": {
// "bbb": {
// "ccc": "ccc",
// },
// "ddd": "ddd",
// },
// },
Implementation
Map<String, dynamic> toTreeMap([String Function(String key)? keyBuilder]) {
final converted = map((key, value) {
return MapEntry(
key
.trimQuery()
.trimString("/")
.split("/")
.map((k) => keyBuilder?.call(k) ?? k)
.where((e) => e.isNotEmpty)
.toList(),
value,
);
});
var res = <String, dynamic>{};
for (final map in converted.entries) {
res = _toTreeMap(res, map.key, map.value, 0);
}
return res;
}