2010-08-16 46 views
2

我试图分裂这个名单二郎 - 斯普利特列表到列表基于价值

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

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

基本上基础上,< < “00” >>

什么是最好的BIF去做这件事,我有一些代码,但它马虎,我试图学习。

由于

编辑:

试过以下,不工作

Done2 =列表:splitwith([< < “00” >>],DONE1)

EDIT : This Line works!

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

不过,我需要的东西多一点复杂:当DELIM为[< < “00” >>,< < “23” >>]像

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> 

没有运气

+0

根据这个链接http://www3.erlang.org/doc/man/lists.html#split-2,你需要使用splitwith – 2010-08-16 06:38:58

+0

它似乎并不是'lists:splitwith(fun(A) - > A == [<<"00">>] end,List).'返回你在你的问题中要求的内容。结果与第二个'List'中的结果不同。第二份清单根本没有吐露。这似乎与'[<<"00">>]'被删除。你能更精确地定义你想要的东西吗? – 2010-08-16 09:47:33

回答

3

我不确定我是否正确理解您的要求。这是一个可能的解决方案。它将在任何分隔符上分割列表,如[< <“00”>> | _]。

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">>]] 
+0

您的解决方案实际上并未拆分清单......另一方面,如果原始问题是“正确的”答案...... :-) – 2010-08-17 10:18:11

1

1>列表= [[< < “5” >>,< < “54” >>],[< < “00” >>,< < “23” >>],[< <“35”>>,< <“54”>>],[< <“5”>>],[< <“00”>>,< <“23”>>]]。 [[< < “5” >>,< < “54” >>], [< < “00” >>,< < “23” >>], [< < “35” >>,< < “54” >>], [< < “5” >>], [< < “00” >>,< < “23” >>]]

2>分隔符= [< <“ 00“>>,< <”23“>>]。
[< < “00” >>,< < “23” >>]

3>列表:过滤器(FUN(L) - > L/=定界符端,列表)。
[[< < “5” >>,< < “54” >>],[< < “35” >>,< < “54” >>],[< < “5” >>]]