我无法定义空的IndexedTables,例如
using IndexedTables, IndexedTables.Table
t = Table(Columns(a=Int64[],b=String[]),Int64[])
t[1,"a"] = 1
t[1,"b"] = 2
t[1,"c"] = t[1,"a"] + t[1,"b"]
BoundsError: attempt to access 0-element Array{Int64,1} at index [0]
我知道创建带有数据的IndexedTable比创建一个空数据然后插入值更有效,但有时你不得不这样做。
这是一个错误吗?如果是这样,是否有可能的解决方法?
(我已经在Julia forum发布了这个帖子,但到目前为止我没有回复)
答案 0 :(得分:2)
这可能是IndexedTables中的一个错误。
插入IndexedTable需要重新索引才能访问数据。使用flush!
重新编制索引。
但flush!(t)
在问题的示例中失败,空t
。
修复调用flush!
的{{1}}可以通过以下方式完成:
_merge!
更改是在第一个julia> function IndexedTables._merge!(dst::IndexedTable, src::IndexedTable, f)
if length(dst.index)==0 || isless(dst.index[end], src.index[1])
append!(dst.index, src.index)
append!(dst.data, src.data)
else
# merge to a new copy
new = _merge(dst, src, f)
ln = length(new)
# resize and copy data into dst
resize!(dst.index, ln)
copy!(dst.index, new.index)
resize!(dst.data, ln)
copy!(dst.data, new.data)
end
return dst
end
julia> t[1,"c"] = t[1,"a"] + t[1,"b"]
3
中添加了length(...)
。
当然,应该使用IndexedTables.jl打开拉取请求/问题。安东内洛,你会这样做吗? (或我)