为什么Base.rsplit不反转Julia中数据的顺序(与Base.split相比)



我是第一次尝试Base.rsplit(),当我使用splitrsplit时,我惊讶地发现数据的顺序没有改变。参见此示例:

julia> my_string = "Hello.World.This.Is.A.Test"
"Hello.World.This.Is.A.Test"
julia> a = split(my_string, ".")
6-element Vector{SubString{String}}:
"Hello"
"World"
"This"
"Is"
"A"
"Test"
julia> b = rsplit(my_string, ".")
6-element Vector{SubString{String}}:
"Hello"
"World"
"This"
"Is"
"A"
"Test"
julia> a == b
true

这有点违反直觉,因为rsplit说:

类似于split,但从字符串的末尾开始。

rsplit只是从右侧开始,唯一实际的区别是limit参数。

尝试在Julia:中键入

@less rsplit("txt",".")

你会发现以下功能:

function _rsplit(str::AbstractString, splitter, limit::Integer, keepempty::Bool, strs::Array)
n = lastindex(str)::Int
r = something(findlast(splitter, str)::Union{Nothing,Int,UnitRange{Int}}, 0)
j, k = first(r), last(r)
while j > 0 && k > 0 && length(strs) != limit-1
(keepempty || k < n) && pushfirst!(strs, @inbounds SubString(str,nextind(str,k)::Int,n))
n = prevind(str, j)::Int
r = something(findprev(splitter,str,n)::Union{Nothing,Int,UnitRange{Int}}, 0)
j, k = first(r), last(r)
end
(keepempty || n > 0) && pushfirst!(strs, SubString(str,1,n))
return strs
end

相关内容

  • 没有找到相关文章

最新更新