有關的:
如何將字串轉換為陣列?
這是一個后續問題。我將如何列出該數字中的所有數字(當前為字串)?
"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
uj5u.com熱心網友回復:
像這樣簡單易行:
function str2vec(s::String) return map(x->parse(Int,x), split(s,"")) endjulia> str2vec("124") 3-element Vector{Int64}: 1 2 4或者通過廣播:
julia> parse.(Int, split("124","")) 3-element Vector{Int64}: 1 2 4通過管道功能:
julia> "124" |> x->split(x, "") |> x->parse.(Int, x) 3-element Vector{Int64}: 1 2 4利用該
eachsplit函式,它是一個惰性函式并回傳一個生成器物件(在 Julia 1.8 中引入):julia> eachsplit("124", "") |> x->parse.(Int, x) 3-element Vector{Int64}: 1 2 4根據Dan 的建議,您嘗試另一種方法:
Int8在收集的 s 上使用char:
julia> Int8.(collect("124")).-48 3-element Vector{Int64}: 1 2 4- 使用
Iterators.map:
julia> collect(Iterators.map(x->Int8(x)-48,"123")) 3-element Vector{Int64}: 1 2 3
對標
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"));
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)
uj5u.com熱心網友回復:
您也可以使用內置digits函式。
默認情況下,它回傳從后到前的數字:
julia> digits(parse(Int, "1234"))
4-element Vector{Int64}:
4
3
2
1
reverse!如果您希望它們的順序與字串中的順序相同,則可以得到結果:
julia> digits(parse(Int, "1234")) |> reverse!
4-element Vector{Int64}:
1
2
3
4
parse這比單獨計算每個數字運行得快得多。該 Int8(...) .- 48方法仍然更快,但如果輸入字串恰好無效,它會靜默失敗,這可能會很危險。由于我們在parse此處使用,因此在這種情況下此方法會正確報告錯誤。
julia> Int8.(collect("invalid")).-48
7-element Vector{Int64}:
57
62
70
49
60
57
52
julia> digits(parse(Int, "invalid")) |> reverse!
ERROR: ArgumentError: invalid base 10 digit 'i' in "invalid"
uj5u.com熱心網友回復:
我想最簡單的方法可能是這樣的:
const sentence = 'Sentence with words and numbers 12345';
let sentenceArray = sentence.replace(/\s/g, '').split('');
console.log(sentenceArray);
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535262.html
標籤:数组细绳茱莉亚
上一篇:在字串中查找數字并按它們排序
