我是erlang的新手,可能有一个简单的问题。
假设我有A = [ 7, 203, 15, 11 ]
和一些二进制B
之类的东西。 A
和B
都是在运行时生成的。
有没有一种简单的方法可以通过B
中描述的位置检查A
中的位。
所以要检查的第一位是7,接下来是203,依此类推。
我意识到我可以对A
进行排序并迭代B
,直到我处于A
内的位置,但对于这样一个简单的问题,这似乎有点过头了。 / p>
提前致谢!
答案 0 :(得分:2)
您可以执行以下模块:
-module(bits).
-export([select/2]).
select(Pattern, Bitstring) -> select(Pattern, Bitstring, []).
select([], _, Acc) -> lists:reverse(Acc);
select([H | T], Bitstring, Acc) ->
Pos = H - 1,
<<_:Pos/bitstring, B:1/integer, _/bitstring>> = Bitstring,
select(T, Bitstring, [B | Acc]).
答案 1 :(得分:0)
使用列表理解的示例:
A=[0,1,2,3,4,5,6,7].
B = <<"0123456789">>.
[begin
<<_:D/bits, Bit:1/bits, _/bits>> = B,
Bit
end
|| D <- A].
给出:
[<<0:1>>,
<<0:1>>,
<<1:1>>,
<<1:1>>,
<<0:1>>,
<<0:1>>,
<<0:1>>,
<<0:1>>]
这是0x30,即'0'。
编辑:呸,修复了错误......