-
Notifications
You must be signed in to change notification settings - Fork 9
Open
Description
MWE:
julia> struct NamedVector{T,A,B} <: AbstractArray{T,1}
data::A
names::B
end
function NamedVector(data, names)
@assert size(data) == size(names)
NamedVector{eltype(data), typeof(data), typeof(names)}(data, names)
end
Base.size(n::NamedVector) = size(n.data)
Base.getindex(n::NamedVector, i::Int) = n.data[i]
Base.to_index(n::NamedVector, name::Symbol) = findfirst(==(name), n.names)
Base.checkbounds(::Type{Bool}, n::NamedVector, names::AbstractArray{Symbol}) = all(name in n.names for name in names)
julia> n = NamedVector(1:4, [:a, :b, :c, :d]);
julia> using InvertedIndices
julia> n[Not([:a,:b])]
2-element Array{Int64,1}:
1
2
julia> n[[:a,:b]]
2-element Array{Int64,1}:
1
2
The issue is that arrays don't get their elements converted by to_indices
, but we check each element assuming that it did.
Metadata
Metadata
Assignees
Labels
No labels