我有一个元组,其中包含由#
分隔的两条信息,看起来像x = ("aa#b", "a#c", "a#d")
。我可以使用理解以下列方式将此数据转换为数组[split(x[i], "#")[j] for i in 1:length(x), j in 1:2]
。
然而,这似乎效率低下,因为我有效地运行了split命令两次。有没有一种处理这种情况的首选方法?
谢谢
答案 0 :(得分:3)
function hashsplit(x)
out = Array{SubString{String},2}(2,length(x))
for (ind,j) in enumerate(x)
out[:,ind] = split(j,"#")
end
return out
end
应该更快。另外,列表理解的简单方法是
[(split(x[i], "#")...) for i in eachindex(x)]
(对于元组的向量)
cat(2,ans...)
或reduce(hcat, ans)
。
答案 1 :(得分:1)
尽管这是一个老问题,但这是我建议的解决方案
String.(reduce(hcat,split.(a,'#')))
我用@time
运算符检查过。与亚历山大提出的列表理解方法0.042378 seconds (90.93 k allocations: 4.330 MiB)
相比,
与提出的解决方案进行相同操作所需的时间为0.000028 seconds (34 allocations: 1.500 KiB)
。