Arrays 当数组中没有任何内容时,如何从数组eltype中删除任何内容?

Arrays 当数组中没有任何内容时,如何从数组eltype中删除任何内容?,arrays,type-conversion,julia,Arrays,Type Conversion,Julia,例如,如果函数(例如indexin)的输出具有向量{Union{Nothing,Int64}类型, 但是预先知道只输出值(无无)。 并且该输出应馈送至另一个函数 对于这样的类型,这是一个错误,但是使用简单的Int64数组就可以了 说 如何将该输出转换为Int64数组 在这种情况下,以下内容可以工作,并且可以在函数中收集,但必须有一种更优雅的方式 julia> subtypes = Base.uniontypes(eltype(output)) 2-element Vector{Any}:

例如,如果函数(例如
indexin
)的输出具有
向量{Union{Nothing,Int64}
类型,
但是预先知道只输出值(无
)。
并且该输出应馈送至另一个函数
对于这样的类型,这是一个错误,但是使用简单的
Int64
数组就可以了

如何将该输出转换为
Int64
数组

在这种情况下,以下内容可以工作,并且可以在函数中收集,但必须有一种更优雅的方式

julia> subtypes = Base.uniontypes(eltype(output))
2-element Vector{Any}:
 Nothing
 Int64

julia> no_Nothing = filter(!=(Nothing), subtypes)
1-element Vector{Any}:
 Int64

julia> new_eltype = Union{no_Nothing...}
Int64

julia> Array{new_eltype}(output)
2-element Vector{Int64}:
 1
 2


试着做点什么

julia> output = Union{Nothing, Int64}[1, 2]
2-element Vector{Union{Nothing, Int64}}:
 1
 2

julia> something.(output)
2-element Vector{Int64}:
 1
 2

或者,您可以使用
Int.(输出)
强制键入
Int
。这是使用Julia的广播语法将
Int
的“构造器”应用于向量的所有条目。
在本例中,某些东西可以工作,但一般来说,如果它出现在数组中,它会展开一些
,因此它并不理想。自动
eltype
缩小AFAICT的一般方法是调用
identity.(output)
或只调用
[v代表v在output]
。我认为如果在这里看到
什么都没有
,就会出现错误。如果您愿意,您可以执行
操作。(输出,0)
以明确提供在这种情况下应提供的内容。在问题中,明确说明“事先知道只有值才会输出”。因此,我给出了答案。
julia> output = Union{Nothing, Int64}[1, 2]
2-element Vector{Union{Nothing, Int64}}:
 1
 2

julia> something.(output)
2-element Vector{Int64}:
 1
 2