Erlang - 根据值将列表拆分为列表

时间:2010-08-16 06:32:32

标签: erlang list

我正在尝试拆分此列表

List = [[<<"5">>, <<"54">>], [<<"00">>], [<<"35">>, <<"54">>, <<"45">>, <<"55">>], [<<"00">>],[ <<"5">>]]

进入

List = [[<<"5">>, <<"54">>], [<<"35">>, <<"54">>, <<"45">>, <<"55">>], [<<"5">>]]

基本上基于&lt;&lt;“00”&gt;&gt;

最好的BIF是什么,我有一些代码,但它草率,我想学习。

由于

编辑:

尝试以下操作,无效

Done2 = list:splitwith([&lt;&lt;“00”&gt;&gt;],Done1),

编辑: 这条线有效!

7> lists:splitwith(fun(A) -> A == [<<"00">>] end, List).
{[],
 [[<<"5">>,<<"54">>],
  [<<"00">>],
  [<<"35">>,<<"54">>,<<"45">>,<<"55">>],
  [<<"00">>],
  [<<"5">>]]}

然而,我需要一些更复杂的东西:例如,当分隔符是[&lt;&lt;“&lt;”&lt;“&lt;&quot;”&gt;&gt;&gt;,&lt;&lt;“23”&gt;&gt;]

9> List = [[<<"5">>,<<"54">>], [<<"00">>,<<"23">>], [<<"35">>,<<"54">>], [<<"5">
>], [<<"00">>, <<"23">>]].

[[<<"5">>,<<"54">>],
 [<<"00">>,<<"23">>],
 [<<"35">>,<<"54">>],
 [<<"5">>],
 [<<"00">>,<<"23">>]]

10> lists:splitwith(fun(A) -> A == [<<"00">>] end, List).
{[],
 [[<<"5">>,<<"54">>],
  [<<"00">>,<<"23">>],
  [<<"35">>,<<"54">>],
  [<<"5">>],
  [<<"00">>,<<"23">>]]}

11> lists:splitwith(fun(A) -> A == [<<"00">>,<<"23">>] end, List).
{[],
 [[<<"5">>,<<"54">>],
  [<<"00">>,<<"23">>],
  [<<"35">>,<<"54">>],
  [<<"5">>],
  [<<"00">>,<<"23">>]]}
12>

那里没有运气

2 个答案:

答案 0 :(得分:3)

我不确定我是否正确理解您的要求。这是一个可能的解决方案。它会将列表拆分为任何分隔符,如[&lt;&lt;“&lt;”&lt;“&lt;”&lt;“&lt;”&lt;“ | _]。

1> List = [[<<"5">>, <<"54">>], [<<"00">>], [<<"35">>, <<"54">>, <<"45">>, <<"55">>], [<<"00">>, <<"23">> ],[ <<"5">>]].
[[<<"5">>,<<"54">>],
 [<<"00">>],
 [<<"35">>,<<"54">>,<<"45">>,<<"55">>],
 [<<"00">>,<<"23">>],
 [<<"5">>]]
2> List2 =  [ X || X <- List, case X of [ <<"00">> | _ ] -> false; _ -> true end].                                      
[[<<"5">>,<<"54">>],
 [<<"35">>,<<"54">>,<<"45">>,<<"55">>],
 [<<"5">>]]

答案 1 :(得分:1)

1&GT;列表= [[&lt;&lt;“5”&gt;&gt;,&lt;&lt;“54”&gt;&gt;],[&lt;&lt;“00”&gt;&gt;,&lt;&lt;“23”&gt; ;&gt;],[&lt;&lt;“35”&gt;&gt;,&lt;&lt;“54”&gt;&gt;],[&lt;&lt;“5”&gt;&gt;],[&lt;&lt; “00”&gt;&gt;,&lt;&lt;“23”&gt;&gt;]]。 [[&LT;&LT; “5” &GT;&GT;,&LT;&LT; “54” &GT;&GT],  并[d&LT; “00” &GT;&GT;,&LT;&LT; “23” &GT;&GT],  并[d&LT; “35” &GT;&GT;,&LT;&LT; “54” &GT;&GT],  并[d&LT; “5” &GT;&GT],  并[d&LT; “00” &GT;&GT;,&LT;&LT; “23” &GT;&GT;]]

2 - ;分隔符= [&lt;&lt;“00”&gt;&gt ;,&lt;&lt;“23”&gt;&gt;]。
并[d&LT; “00” &GT;&GT;,&LT;&LT; “23” &GT;&GT;]

3&GT; lists:filter(fun(L) - &gt; L / = Delimiter end,List)。
[[&LT;&LT; “5” &GT;&GT;,&LT;&LT; “54” &GT;&GT],并[d&LT; “35” &GT;&GT;,&LT;&LT; “54” &GT;&GT ],并[d&LT; “5” &GT;&GT;]]