3

我有一个使用jiffy库生成的元组。

例如:jiffy:decode(<<"{\"foo\":\"bar\"}">>).导致
{[{<<"foo">>,<<"bar">>}]}

我想<<"foo">>成为"foo"

有没有办法将其转换<<"foo">>"foo"

基本上我想转换这个:

[{<<"t">>,<<"getWebPagePreview">>},{<<"message">>,<<"google.com">>}]

进入这个:

[{"t",<<"getWebPagePreview">>},{"message",<<"google.com">>}]

注意:认为这是一个非常大的列表,我想要一个有效的解决方案。

4

2 回答 2

4

有一个函数可以将二进制文件<<"hello">>转换为列表"hello"

1> binary_to_list(<<"hello">>).
"hello"
2> L = [{<<"t">>,<<"getWebPagePreview">>},{<<"message">>,<<"google.com">>}].
[{<<"t">>,<<"getWebPagePreview">>},
 {<<"message">>,<<"google.com">>}]

您可以使用列表推导将其应用于您的列表:

3> [{binary_to_list(X),Y} || {X,Y} <- L].
[{"t",<<"getWebPagePreview">>},{"message",<<"google.com">>}]
4>

您可以将其嵌入到函数中:

convert(List) ->
    F = fun({X,Y}) -> {binary_to_list(X),Y} end,
    [F(Tuple) || Tuple <- List].
于 2017-01-30T12:41:56.147 回答
2

因为(何时)元素的顺序无关紧要,最有效的版本是

convert({List}) ->
    {convert(List, [])}.

convert([], Acc) -> Acc;
convert([{X, Y}|T], Acc) ->
    convert(T, [{binary_to_list(X), Y}|Acc]).

当您想使用列表理解保留元素简单版本的顺序时

convert({List}) ->
    {[{binary_to_list(X), Y} || {X, Y} <- List]}.

是(几乎)完全等价的

convert({List}) ->
    {convert_(List)}.

convert_([]) -> [];
convert_([{X, Y}|T]) ->
    [{binary_to_list(X), Y}|convert_(T)].
于 2017-01-30T15:57:26.590 回答