2010-08-16 3 views
2

Je suis en train de diviser cette listeErlang - Split une liste en fonction de la valeur des listes

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

dans

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

Fondamentalement, sur la base du < < "00" >>

Quel est le meilleur BIF à faire à ce sujet, j'ai du code, mais c'est bâclé, et Im essayant d'apprendre.

Merci

EDIT:

Essayé ce qui suit, ne fonctionne pas

Done2 = listes: splitwith ([< < "00" >>], Done1),

EDIT : Cette ligne fonctionne!

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

Cependant, je besoin de quelque chose un peu plus compliqué: comme quand le delim est [< < "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> 

Pas de chance il

+0

en fonction de ce lien http://www3.erlang.org/doc/man/lists.html#split-2, vous devez utiliser splitwith –

+0

Il ne semble pas que 'lists: splitwith (fun (A) - > A == [<<"00">>] end, List) .' renvoie ce que vous demandez dans votre question. Le résultat n'est pas le même que ce que vous avez dans votre deuxième 'Liste'. Les deuxièmes listes ne sont pas crachées du tout. Il semble que '[<<"00">>]' soit supprimé. Pouvez-vous définir ce que vous aimeriez plus précisément? –

Répondre

3

Je ne suis pas sûr d'avoir bien compris vos exigences. Voici une solution possible. Il va diviser la liste sur n'importe quel délimiteur comme [< < "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

Votre solution ne divise pas réellement la liste ... D'un autre côté, étant donné la question initiale, c'était une réponse "correcte" ... :-) –

1

1> Liste = [[< < "5" >>, < < "54" >>], [< < "00" >>, < < "23" >>], [< < "35" >>, < < "54" >>, [< < "5" >>], [< < "00" >>, < < "23" >>]]. [[< < "5" >>, < < "54" >>], [< < "00" >>, < < "23" >>], [< < "35" >>, < < "54" >>], [< < "5" >>], [< < "00" >>, < < "23" >>]]

2> delimiter = [< < " 00 ">>, < <" 23 ">>].
[< < "00" >>, < < "23" >>]

3> Listes: filtre (fun (L) -> L/= fin Délimiteur, Liste).
[[< < "5" >>, < < "54" >>], [< < "35" >>, < < "54" >>], [< < "5" >>]]

Questions connexes