我使用jiffy库生成了一个元组。
例如:jiffy:decode(<<"{\"foo\":\"bar\"}">>).
会产生
{[{<<"foo">>,<<"bar">>}]}
我希望<<"foo">>
为"foo"
有没有办法将<<"foo">>
转换为"foo"
?
基本上我想转换它:
[{<<"t">>,<<"getWebPagePreview">>},{<<"message">>,<<"google.com">>}]
进入这个:
[{"t",<<"getWebPagePreview">>},{"message",<<"google.com">>}]
注意:认为这是一个非常大的列表,我想要一个有效的解决方案。
答案 0 :(得分: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].
答案 1 :(得分:2)
因为(当)元素的顺序无关紧要时,最有效的版本是
convert({List}) ->
{convert(List, [])}.
convert([], Acc) -> Acc;
convert([{X, Y}|T], Acc) ->
convert(T, [{binary_to_list(X), Y}|Acc]).
当你想用list comprehension维护元素strightforward版本的顺序时
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)].