想象一下,我们有以下3个数组的数组,涵盖范围1到150:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ... 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
[51, 52, 53, 54, 55, 56, 57, 58, 59, 60 ... 92, 93, 94, 95, 96, 97, 98, 99, 100, 107]
[71, 73, 84, 101, 102, 103, 104, 105, 106, 108 ... 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]
我想构建一个数组,存储在哪个数组中我们找到值1到150.结果必须是:
[1 1 1 ... 1 2 2 2 ... 2 3 2 3 2 ... 3 3 3 ... 3]
,
其中每个元素对应于1,2,3,...,150。获得的数组然后给出元素1到150的数组成员资格。代码必须应用于任意数量的数组(因此不仅仅是3个数组)。
你可以使用array comprehension。这是一个包含范围1:10
的三个向量的示例:
A = [1, 3, 4, 5, 7]
B = [2, 8, 9]
C = [6, 10]
现在我们可以使用in
编写一个理解,并使用回退错误来保护:
julia> [x in A ? 1 : x in B ? 2 : 3 for x in 1:10]
10-element Array{Int64,1}:
1
⋮
3
如果输入错误,也许还包括回退错误
julia> [x in A ? 1 : x in B ? 2 : x in C ? 3 : error("not found") for x in 1:10]
10-element Array{Int64,1}:
1
⋮
3
在这种情况下用于搜索的交易记忆:
array
来记录每个值所在的array
。# example arrays
N=100; A=rand(1:N,30);
B = rand(1:N,40);
C = rand(1:N,35);
# record array containing each value:
A=1,B=2,C=3;
not found=0;
arrayin = zeros(Int32, max(maximum(A),maximum(B),maximum(C)));
arrayin[A] .= 1;
arrayin[B] .= 2;
arrayin[C] .=3;