如何将 Any 类型的数组转换为特定类型

问题描述 投票:0回答:3

说我有:

arr = {"a" "b" "r"}
> 1x3 Array{Any,2}:
> "a"  "b"  "r"

我希望它是 Array{Symbol,2} 类型。

julia
3个回答
4
投票

还有

julia> convert(Array{Symbol}, arr)
1x3 Array{Symbol,2}:
:a  :b  :r

1
投票

这有效:

symarr = reshape(Symbol[arr...],size(arr)...)

还要注意如果数组中的所有元素都是你想要的类型,你可以使用:

strarr = reshape([arr...],size(arr)...)

如果你对 Vector 满意,你可以简单地使用:

symvec = Symbol[arr...]
strvec = [arr...]

还有一个有趣的宏:

macro convarr(a, t)
    :(reshape($t[$a...],size($a)...))
end
@convarr arr Symbol

请注意,以上所有内容都会创建原始 Array{Any,2} 数组的新副本


0
投票

正因为这似乎是我搜索时的最高结果,所以我会将我的评论分解为可见性的答案。

已接受的答案似乎不再有效。 有关相关讨论,请参阅此链接。

我建议使用列表理解。

接受的方法

arr = ["a" "b" "c"]
1×3 Matrix{String}:
 "a"  "b"  "c"

convert(Array{Symbol}, arr)
ERROR: MethodError: Cannot `convert` an object of type String to an object of type Symbol

推荐方法

[Symbol(a) for a in arr]
1×3 Matrix{Symbol}:
 :a  :b  :c
© www.soinside.com 2019 - 2024. All rights reserved.