2010-08-16 47 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」 >>]]