这本质上是同一个问题 Julia:展平数组/元组的数组 但对于
String
数组。 上面线程中显示的 Iterators.flatten(xs)
解决方案非常适合数字。但是,使用 Strings
,Iterators.flatten()
将 String
扁平化为字符!
julia> f(xs...) = collect(Iterators.flatten(xs))
f (generic function with 1 method)
julia> f("oh", ["a", "b"], "uh")
6-element Vector{Any}:
'o': ASCII/Unicode U+006F (category Ll: Letter, lowercase)
'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase)
"a"
"b"
'u': ASCII/Unicode U+0075 (category Ll: Letter, lowercase)
'h': ASCII/Unicode U+0068 (category Ll: Letter, lowercase)
如何从像
String
这样的调用中获取 f("hello", ["a", "b"], . . .)
数组?
如果你能告诉迭代器将
String
视为标量,那就太好了。
不太确定是否有内置函数可以做到这一点,但自己编写并不难。也许是这样的:
function custom_flatten(xs...)
result = []
for x in xs
if isa(x, AbstractArray)
append!(result, custom_flatten(x...))
else
push!(result, x)
end
end
return result
end
xs = ["hello", ["a", "b"], "world", [["nested"], "array"]]
flattened = custom_flatten(xs...)
println(flattened)
# Output: Any["hello", "a", "b", "world", "nested", "array"]
您也可以添加检查元素是否为
string
并抛出错误或其他内容,因为这也适用于数字。