[1,2,3] 这里没有分隔符,-6ren">
gpt4 book ai didi

arrays - 如何将字符串转换为没有空格的数组

转载 作者:行者123 更新时间:2023-12-05 01:22:10 30 4
gpt4 key购买 nike

相关:

How to convert from string to array?

这是一个后续问题。我将如何列出此数字中的所有数字(当前为字符串)?

"123" -> [1,2,3]

这里没有分隔符,那么我应该怎么做呢?

请注意,目前我使用的是最新版本的 Julia,v1.8.3所以 parse 似乎在其他问题的答案中不起作用。使用 parse() 时出错:

ERROR: LoadError: MethodError: no method matching parse(::SubString{String})
Closest candidates are:
parse(::Type{T}, ::AbstractString) where T<:Complex at parse.jl:381
parse(::Type{Sockets.IPAddr}, ::AbstractString) at ~/usr/share/julia/stdlib/v1.8/Sockets/src/IPAddr.jl:246
parse(::Type{T}, ::AbstractChar; base) where T<:Integer at parse.jl:40
...
Stacktrace:
[1] iterate
@ ./generator.jl:47 [inlined]
[2] _collect
@ ./array.jl:807 [inlined]
[3] collect_similar
@ ./array.jl:716 [inlined]
[4] map
@ ./abstractarray.jl:2933 [inlined]
[5] top-level scope
@ ~/proc/self/fd/0:1
in expression starting at /proc/self/fd/0:1
exit status 1

最佳答案

  1. 像这样简单易行:

    function str2vec(s::String)
    return map(x->parse(Int,x), split(s,""))
    end
    julia> str2vec("124")
    3-element Vector{Int64}:
    1
    2
    4
  2. 或者通过广播:

    julia> parse.(Int, split("124",""))
    3-element Vector{Int64}:
    1
    2
    4
  3. 通过管道函数:

    julia> "124" |> x->split(x, "") |> x->parse.(Int, x)
    3-element Vector{Int64}:
    1
    2
    4
  4. 利用 eachsplit 函数,这是一个惰性函数并返回一个生成器对象(在 Julia 1.8 中引入):

    julia> eachsplit("124", "") |> x->parse.(Int, x)
    3-element Vector{Int64}:
    1
    2
    4
  5. 根据 Dan's advice ,你试试别的方法:

    • 在收集到的 char 上使用 Int8:
    julia> Int8.(collect("124")).-48
    3-element Vector{Int64}:
    1
    2
    4
    • 使用 Iterators.map:
    julia> collect(Iterators.map(x->Int8(x)-48,"124"))
    3-element Vector{Int64}:
    1
    2
    4
  6. 另外,可以考虑 DNF's proposal :

    julia> [Int(x)-48 for x in "124"]
    3-element Vector{Int64}:
    1
    2
    4

基准测试

julia> using BenchmarkTools

julia> @btime str2vec("124");
@btime parse.(Int, split("124",""));
@btime "124" |> x->split(x, "") |> x->parse.(Int, x);
@btime eachsplit("124", "") |> x->parse.(Int, x);
@btime Int8.(collect("124")).-48;
@btime collect(Iterators.map(x->Int8(x)-48,"123"));
@btime [Int(x)-48 for x in "123"]
681.250 ns (11 allocations: 864 bytes)
675.460 ns (11 allocations: 864 bytes)
679.747 ns (11 allocations: 864 bytes)
1.280 μs (14 allocations: 816 bytes)
92.412 ns (2 allocations: 160 bytes)
61.711 ns (1 allocation: 80 bytes)
45.152 ns (1 allocation: 80 bytes)

关于arrays - 如何将字符串转换为没有空格的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74459107/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com