如何在Julia中定义空的IndexedTables?

时间:2017-10-18 08:12:10

标签: julia

我无法定义空的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发布了这个帖子,但到目前为止我没有回复)

1 个答案:

答案 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打开拉取请求/问题。安东内洛,你会这样做吗? (或我)