所以我只是在我的另一篇文章中由一个好人解决了一个问题。
ERLANG - Splitting Lists into sub list
现在我是Erlang的初学者,需要一些帮助来解决另一个函数的语法,该函数对我上一篇文章的结果起作用。
例如,我现在有:
Reply = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>, <<55,23,45,07,89,56>>]
我需要将其进一步分解为:
[ [<<56,45,34>>,<<45,67,34>>], [<<12,23,56>>,<<67,67>>] , [<<55,23,45>>, <<89,56>>] ]
此示例中的分隔符是&lt;&lt;&lt;&gt;&gt;
此代码进程是二进制文件
parse(Reply) -> binary:split(Reply, <<07>>, [global]).
但是现在我怎么能递归地遍历数组并再次进行。
以下是我当前代码的示例:
parse(Reply) -> binary:split(Reply, <<01>>, [global]).
parse2(Reply) -> binary:split(Reply, <<07>>, [global]).
func1(Done) -> [parse2(X) || X <- Done].
%%blah blah - get to the executing functions code
Done = parse(Reply),
Done1 = func1(Done),
我知道它必须是最后一个确定有我的超级简单。
最佳, -B
答案 0 :(得分:1)
使用列表推导将函数应用于列表的每个元素。该功能与您上一个问题几乎相同:
1> L = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>, <<55,23,45,07,89,56>>].
[<<56,45,34,7,45,67,34>>,
<<12,23,56,7,67,67>>,
<<55,23,45,7,89,56>>]
2> [binary:split(X, <<07>>, [global]) || X <- L].
[[<<"8-\"">>,<<"-C\"">>],
[<<12,23,56>>,<<"CC">>],
[<<55,23,45>>,<<"Y8">>]]
3> io:format("~w~n",[[binary:split(X, <<07>>, [global]) || X <- L]]).
[[<<56,45,34>>,<<45,67,34>>],[<<12,23,56>>,<<67,67>>],[<<55,23,45>>,<<89,56>>]]
ok
另一个选择是使用列表:map / 2:
4> lists:map(fun(X) -> binary:split(X, <<07>>, [global]) end, L).
[[<<"8-\"">>,<<"-C\"">>],
[<<12,23,56>>,<<"CC">>],
[<<55,23,45>>,<<"Y8">>]]
答案 1 :(得分:0)
想出来,请随时告诉我,如果有更有效的方式 - 或 - 只是你的方式,我毕竟是在学习。
parse(Reply) -> binary:split(Reply, <<01>>, [global]).
parse2(<<>>) -> <<>>;
parse2(Reply) -> binary:split(Reply, <<"=">>, [global]).
func2([H|T], Result) ->
H1 = parse2(H),
func2(T, [H1|Result]);
func2([], Result) -> io:format("Reply 1 = ~p~n", [Result]), Result.
Done = parse(Reply),
Done1 = func2(Done, []),
-B