Julia:展平“String”数组

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

这本质上是同一个问题 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
视为标量,那就太好了。

arrays string julia flatten
1个回答
0
投票

不太确定是否有内置函数可以做到这一点,但自己编写并不难。也许是这样的:

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
并抛出错误或其他内容,因为这也适用于数字。

© www.soinside.com 2019 - 2024. All rights reserved.