Erlang - разделить список на списки на основе значения - PullRequest
2 голосов
/ 16 августа 2010

Я пытаюсь разделить этот список

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

на

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

В основном на основе << "00" >>

Что является лучшимBIF, чтобы идти об этом, у меня есть некоторый код, но он неаккуратный, и я пытаюсь учиться.

Спасибо

РЕДАКТИРОВАТЬ:

Пробовал следующее, не работает

Done2 = списки: splitwith ([<< "00" >>], Done1),

РЕДАКТИРОВАТЬ: эта строка работает!

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>

Не повезло

Ответы [ 2 ]

3 голосов
/ 16 августа 2010

Я не уверен, правильно ли я понял ваши требования.Вот возможное решение.Это разделит список на любой разделитель как [<< "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">>]]
1 голос
/ 19 августа 2010

1> Список = [[<< "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> списки: фильтр (fun (L) -> L / = конец разделителя, список).
[[<< "5" >>, << "54" >>], [<< "35" >>, << "54" >>], [<< "5" >>]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...