在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。
答案 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"
"!"
的上述代码示例,因此针对此问题,我对split
与collect
进行了以下基准测试。
结果是split
比collect
快得多(> 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
的建议已得到该基准的支持。