Erlang 如何从任何复杂项中提取proplist{K,V}列表
有一个术语,它可能由任何东西组成,如命令、命令列表、命令列表、列表列表、命令列表或。。。例如:Erlang 如何从任何复杂项中提取proplist{K,V}列表,erlang,Erlang,有一个术语,它可能由任何东西组成,如命令、命令列表、命令列表、列表列表、命令列表或。。。例如: Term1 = [ {"AAA", [ { "K1", "ka1" }, { "K2", "ka2" }, { "K3", "ka3" } ] }, {"BBB","one"}, {"CCC", [
Term1 = [
{"AAA", [
{ "K1", "ka1" },
{ "K2", "ka2" },
{ "K3", "ka3" }
]
},
{"BBB","one"},
{"CCC", [
{ "K1", "kb1" },
{ "K2", "" },
{ "K3", "kb3" }
]
},
{"DDD", [
[
{ "K1", "kc1" },
{ "K2", "kc2" }
],
[
{ "K1", "kd1" },
{ "K2", "kd2" }
],
"CACETA",
123
]
},
{"EEE", [
{ "K1", "kb1" },
{ "K2", 1122 },
{ "K3", "kb3" }
]
},
{ "T1", "T2", "T3" },
123,
{ "X" },
[ 1, 2, 3, { "K5", "V5" } ]
],
我需要生成一个包含所有proplist[{K,V},…]的列表
[
{ "AAA" , [ ...... ] },
{ "K1" , "ka1" },
{ "K2" , "ka2" },
...
{ "BBB" ,"one"},
{ "CCC" , [ ... ] },
{ "K1" , "kb1" },
...
{ "K5", "V5" }
]
- 请注意,有些键必须在列表中重复,它们的值可以是字符串、列表、元组或数字,也可以是任何值
- 上面示例中数据中的最后一项,例如{“T1”、“T2”、“T3”},不应该出现在结果中,因为它不是两个术语{K,V}的proplist,而是嵌套的{“K5”、“V5”}是并且应该是结果的一部分
extractPropList( [], ResultList ) -> ResultList;
extractPropList( [H|T], ResultList ) -> extractPropList(T, extractPropList(H, ResultList));
extractPropList( {K,V}, ResultList ) -> [ {K,V} | extractPropList(K, extractPropList(V, ResultList)) ].
在测试上述方法时,缺少的部分是处理没有其他匹配项(不是列表,不是{K,V})的术语的最后一行: 给定与avove相似的数据,我得到的结果如下
[{"EEE",[{"K1","kb1"},{"K2",1122},{"K3","kb3"}]},
{"K3","kb3"},
{"K2",1122},
{"K1","kb1"},
{"DDD",
[[{"K1","kc1"},{"K2","kc2"}],
[{"K1","kd1"},{"K2","kd2"}],
"CACETA",123]},
{"K2","kd2"},
{"K1","kd1"},
{"K2","kc2"},
{"K1","kc1"},
{"CCC",[{"K1","kb1"},{"K2","kb2"},{"K3","kb3"}]},
{"K3","kb3"},
{"K2","kb2"},
{"K1","kb1"},
{"BBB","one"},
{"AAA",[{"K1","ka1"},{"K2","ka2"},{"K3","ka3"}]},
{"K3","ka3"},
{"K2","ka2"},
{"K1","ka1"}]
在测试上述方法时,缺少的部分是处理没有其他匹配项(不是列表,不是{K,V})的术语的最后一行: 给定与avove相似的数据,我得到的结果如下
[{"EEE",[{"K1","kb1"},{"K2",1122},{"K3","kb3"}]},
{"K3","kb3"},
{"K2",1122},
{"K1","kb1"},
{"DDD",
[[{"K1","kc1"},{"K2","kc2"}],
[{"K1","kd1"},{"K2","kd2"}],
"CACETA",123]},
{"K2","kd2"},
{"K1","kd1"},
{"K2","kc2"},
{"K1","kc1"},
{"CCC",[{"K1","kb1"},{"K2","kb2"},{"K3","kb3"}]},
{"K3","kb3"},
{"K2","kb2"},
{"K1","kb1"},
{"BBB","one"},
{"AAA",[{"K1","ka1"},{"K2","ka2"},{"K3","ka3"}]},
{"K3","ka3"},
{"K2","ka2"},
{"K1","ka1"}]