如何在Julia中将字符串视为数组/向量

时间:2018-12-28 23:03:22

标签: julia

在Julia语言中,我想在String上使用为Array {T,1}又称为Vector {T}定义的函数,本质上将其视为Array {Char,1}。

我想使用的功能示例:

julia> deleteat!("Hrello!",2)
ERROR: MethodError: no method matching deleteat!(::String, ::Int64)
Closest candidates are:
  deleteat!(::Array{T,1} where T, ::Integer) at array.jl:1177
  deleteat!(::Array{T,1} where T, ::Any) at array.jl:1214
  deleteat!(::BitArray{1}, ::Integer) at bitarray.jl:901
  ...
Stacktrace:
 [1] top-level scope at none:0

julia> deleteat!(['H','r','e','l','l','o','!'], 2)
6-element Array{Char,1}:
 'H'
 'e'
 'l'
 'l'
 'o'
 '!'

为了清楚起见,我想以String开头,以String结尾,但是使用Array {Char,1}操作来更改String。

2 个答案:

答案 0 :(得分:3)

在朱莉娅(Julia)中,应该始终首先尝试collect来从其他事物中获得Vector

julia> deleteat!(collect("Hrello!"), 2)
6-element Array{Char,1}:
 'H'
 'e'
 'l'
 'l'
 'o'
 '!'

答案 1 :(得分:2)

可以将字符串拆分为数组,然后使用this.options[this.selectedIndex].text函数进行操作。

例如,可以对上面的代码执行以下操作:

split

修改

由于提供了使用julia> deleteat!(split("Hrello!", ""), 2) 6-element Array{SubString{String},1}: "H" "e" "l" "l" "o" "!" 的上述代码示例,因此针对此问题,我对splitcollect进行了以下基准测试。

结果是splitcollect快得多(> 10倍),如下所示。

split

@Gnimuc建议首先尝试julia> VERSION v"1.0.3" julia> using BenchmarkTools julia> @benchmark deleteat!(split("Hrello!", ""), 2) BenchmarkTools.Trial: memory estimate: 1.42 KiB allocs estimate: 26 -------------- minimum time: 748.396 ns (0.00% GC) median time: 804.819 ns (0.00% GC) mean time: 1.067 μs (20.80% GC) maximum time: 465.984 μs (99.71% GC) -------------- samples: 10000 evals/sample: 144 julia> @benchmark deleteat!(collect("Hrello!"), 2) BenchmarkTools.Trial: memory estimate: 112 bytes allocs estimate: 1 -------------- minimum time: 60.299 ns (0.00% GC) median time: 65.431 ns (0.00% GC) mean time: 89.189 ns (20.99% GC) maximum time: 66.601 μs (99.83% GC) -------------- samples: 10000 evals/sample: 1000 的建议已得到该基准的支持。