我有一个数组的数组,a
49455-element Array{Array{AbstractString,1},1}
长度变化,这只是许多可能性之一
我需要做一个b = vcat(a…)给我
195158-element Array{AbstractString,1}:
并将其转换为sharearray,以便所有内核都可以处理其中的字符串(我将转换为curcurs后面的Char矩阵,但这并不重要)
在a中,每个元素都是一个包含一定数量字符串的数组,我这样做
map(x -> length(x), a)
49455-element Array{Int64,1}:
1
4
8
.
.
2
是否有一种方法可以很容易地将数组b恢复到与a相同的维度?
使用迭代器。杰包:
# `a` holds original. `b` holds flattened version. `newa` should == `a`
using Iterators # install using Pkg.add("Iterators")
lmap = map(length,a) # same length vector defined in OP
newa = [b[ib+1:ie] for (ib,ie) in partition([0;cumsum(lmap)],2,1)]
这有点整洁,也可以用来生成原始向量的生成器,但是for
循环的实现应该同样快速和清晰。
作为对Dan Getz答案的补充,我们也可以使用zip
代替Iterators。jl's partition
:
tails = cumsum(map(length,a))
heads = [1;tails+1][1:end-1]
newa = [b[i:j] for (i,j) in zip(heads,tails)]