【问题标题】:ERlANG - Splitting Lists into sub listERlANG - 将列表拆分为子列表
【发布时间】:2010-08-12 21:19:27
【问题描述】:

所以我刚刚在另一篇文章中的一个好人很快解决了一个问题。

ERLANG - Splitting Lists into sub list

现在我是 Erlang 的初学者,需要一些关于另一个函数的语法方面的帮助,该函数对我上一篇文章的结果起作用。

例如,我现在有:

   Reply = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>,  <<55,23,45,07,89,56>>]

我需要将其进一步拆分为:

[ [<<56,45,34>>,<<45,67,34>>], [<<12,23,56>>,<<67,67>>] ,  [<<55,23,45>>, <<89,56>>]  ]

本例中的分隔符是>

这个代码过程是二进制的

parse(Reply) -> binary:split(Reply, <<07>>, [global]).

但是现在我怎样才能递归遍历数组并再次执行。

这是我当前代码的示例:

parse(Reply) -> binary:split(Reply, <<01>>, [global]).
parse2(Reply) -> binary:split(Reply, <<07>>, [global]).

func1(Done) -> [parse2(X) || X <- Done].

%%blah blah - get to the executing functions code
Done = parse(Reply),
Done1 = func1(Done),

我知道这一定是最后一个肯定有我的超级简单的东西。

最好, -B

【问题讨论】:

    标签: binary erlang list


    【解决方案1】:

    使用列表推导将函数应用于列表的每个元素。该功能与您上一个问题的功能几乎相同:

    1> L = [<<56,45,34,07,45,67,34>>, <<12,23,56,07,67,67>>,  <<55,23,45,07,89,56>>].
    [<<56,45,34,7,45,67,34>>,
     <<12,23,56,7,67,67>>,
     <<55,23,45,7,89,56>>]
    2> [binary:split(X, <<07>>, [global]) || X <- L].
    [[<<"8-\"">>,<<"-C\"">>],
     [<<12,23,56>>,<<"CC">>],
     [<<55,23,45>>,<<"Y8">>]]
    3> io:format("~w~n",[[binary:split(X, <<07>>, [global]) || X <- L]]).
    [[<<56,45,34>>,<<45,67,34>>],[<<12,23,56>>,<<67,67>>],[<<55,23,45>>,<<89,56>>]]
    ok
    

    另一种选择是使用lists:map/2:

    4> lists:map(fun(X) -> binary:split(X, <<07>>, [global]) end, L).
    [[<<"8-\"">>,<<"-C\"">>],
     [<<12,23,56>>,<<"CC">>],
     [<<55,23,45>>,<<"Y8">>]]
    

    【讨论】:

      【解决方案2】:

      想通了,请随时让我知道是否有更有效的方法 - 或者 - 只是你的方式,毕竟我正在学习。

      parse(Reply) -> binary:split(Reply, <<01>>, [global]).
      parse2(<<>>) -> <<>>;
      parse2(Reply) -> binary:split(Reply, <<"=">>, [global]).
      
      func2([H|T], Result) ->
          H1 = parse2(H), 
          func2(T, [H1|Result]);
      func2([], Result) -> io:format("Reply 1 = ~p~n", [Result]), Result.
      
      
      Done = parse(Reply),
      
      Done1 = func2(Done, []),
      

      -B

      【讨论】:

        猜你喜欢
        • 2011-03-28
        • 2011-05-26
        • 2014-07-07
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 2018-10-24
        相关资源
        最近更新 更多