Erlang Thursday – queue:split/2

今天的Erlang Thursday讲queue模块的原生API:queue:split/2

queue:split/2 有两个入参。第一个入参是一个从零到X的整数N,X是一个队列的元素个数,这个队列就是第二个入参,也就是我们想分隔的队列。函数的返回值是一个两元素元组,第一个元素是被分割队列的前N个元素组成的队列,第二个元素是被分割队列剩下的元素组成的队列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
QueueOne = queue:from_list([a, 1, b, 2, c, 3, 4]).
% {[4,3,c],[a,1,b,2]}
queue:split(4, QueueOne).
% {{[2],[a,1,b]},{[4,3],}}
queue:split(0, QueueOne).
% {{[],[]},{[4,3,c],[a,1,b,2]}}
queue:split(1, QueueOne).
% {{[],[a]},{[4,3,c],[1,b,2]}}
queue:split(7, QueueOne).
% {{[4,3,c],[a,1,b,2]},{[],[]}}
queue:split(15, QueueOne).
% ** exception error: bad argument
% in function queue:split/2
% called as queue:split(15,{[4,3,c],[a,1,b,2]})
{SplitFirst, SplitSecond} = queue:split(3, QueueOne).
% {{[b,1],[a]},{[4,3,c],[2]}}
SplitFirst.
% {[b,1],[a]}
SplitSecond.
% {[4,3,c],[2]}
queue:peek(SplitFirst).
% {value,a}
queue:peek(SplitSecond).
% {value,2}

Erlang也提供一个 queue:join/2 函数,它有两个入参,入参类型都是队列,函数返回值是一个新的队列,新队列是由第二个入参队列添加到第一个入参队列后面形成的。

1
2
3
4
5
6
7
8
queue:join(SplitFirst, SplitSecond).
% {[4,3,c],[a,1,b,2]}
queue:join(SplitSecond, SplitFirst).
% {[b,1],[2,c,3,4,a]}
queue:join(queue:new(), SplitFirst).
% {[b,1],[a]}
queue:join(queue:new(), queue:new()).
% {[],[]}

原文链接: https://www.proctor-it.com/erlang-thursday-queue-split-2/