[英]ERLANG - Splitting Lists into sub list
嗨,這是我的第一篇文章,希望大家都好。 所以我剛剛開始erlang,我遇到了一個問題,我不確定如何解決。
所以我有一個我正在接受的二進制文件
<<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>>
我的目標是根據01將其拆分為子列表(如果效率更高,則為二進制)。
例如,上面應該看起來像:
<<56, 23, 67, 34, 45, 78>> <<54, 67, 87, 45, 53>> <<34, 56, 78>>
-要么-
[[56, 23, 67, 34, 45, 78], [54, 67, 87, 45, 53], [34, 56, 78]]
01是分隔標記,不需要包含在最終輸出中。
我嘗試過這樣的事情:(如果有更好的方法,請不要理會)
parse1([]) -> [];
parse1(1) -> io:format("SOHSOHSOHSOHSOHSSOHSOHS");
parse1(Reply) -> parse1({Reply, []});
parse1({Reply, nxtParse}) ->
[H | T] = Reply,
case H of
_ when H > 1 ->
[H | nxtParse],
io:format("Reply 1 = ~p~n", [H]),
parse1({T, nxtParse});
_ when H == 1 ->
io:format("SOHSOHSOHSOHSOHSSOHSOHS");
[] ->
ok
end.
這根本不是很干凈,根本不像專業人士的寫作。 我確定當有人告訴我時,我會打我的頭“呃”。
我意識到肯定有不止一個解決方案,但最好的解決方案是什么。 似乎ERL有很多BIF和做事的方式,我想要找到自己的方式。
謝謝你們的幫助-B
與R14A一起,Erlang現在包含一個binary
模塊來處理這樣的任務:
1> Bin = <<56, 23, 67, 34, 45, 78, 01, 54, 67, 87, 45, 53, 01, 34, 56, 78>>.
<<56,23,67,34,45,78,1,54,67,87,45,53,1,34,56,78>>
2> binary:split(Bin, <<01>>, [global]).
[<<56,23,67,34,45,78>>,<<"6CW-5">>,<<"\"8N">>]
請注意,雖然看起來不對( <<"6CW-5">>
和<<"\\"8N">>
),但基礎表示是正確的,字符串是試圖弄清楚如何打印出二進制文件的VM。以原始格式輸出時看到相同的調用:
3> io:format("~w~n", [binary:split(Bin, <<01>>, [global])]).
[<<56,23,67,34,45,78>>,<<54,67,87,45,53>>,<<34,56,78>>]
ok
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.