Julia: aprimoramento split (), keep_splitter

Criado em 16 fev. 2017  ·  3Comentários  ·  Fonte: JuliaLang/julia

Olá,

Eu gostaria de sugerir uma solicitação de recurso, na qual estou trabalhando agora em um novo branch, para a função split(str, splitter; limit=0, keep=true) .

Eu me peguei tentando usar a função dessa forma, e o que espero de alguma forma é o seguinte,

julia> split("abcabcdabbcd", "b"; keep_splitter = true)
3-element Array{SubString{String},1}:
 "a"   
 "bca" 
 "bcda"
 "b"
 "bcd"

Devo continuar trabalhando? Seria uma mudança significativa para o resto do ecossistema?

Algumas ideias:

  • Se a bandeira keep_spliter for true , então não deve fazer nenhuma diferença se keep (que significa resultados vazios), é true ou false , visto que não haveria resultados vazios.
  • Não tenho certeza se devo incluir algum outro sinalizador para incluir o divisor apenas na próxima substring ou na anterior. É assim que readlines(file) funciona, não é? Em cada elemento do array temos '\n' no final.
julia> split("abcabcdabbcd", "b"; keep_splitter = true, prepend = false)
3-element Array{SubString{String},1}:
 "ab"   
 "cab" 
 "cdab"
 "b"
 "cd"

Desde já, obrigado!

PS, talvez isso possa ser feito com outra função que ainda não conheço

collections design strings

Comentários muito úteis

Isso também surge ao tentar dividir strings de caixa de camelo:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

Uma solução é usar um delimitador regex: split(foo, r"(?=[A-Z])") mas isso é muito menos intuitivo (e eu não teria resolvido sem ajuda externa).

Todos 3 comentários

Relacionado a uma possível função splitlines (https://github.com/JuliaLang/julia/pull/20390) e ao novo argumento chomp para readline / eachline (https://github.com/JuliaLang/julia/pull/19944, https://github.com/JuliaLang/julia/pull/19944).

Cc: @mpastell

Observe que outra maneira de olhar para a palavra-chave keep atual, o que ela realmente faz é dizer que seu divisor pode ser repetido 1 ou mais vezes, ou seja, envolvê-lo implicitamente em (...)+ como um regex.

Isso também surge ao tentar dividir strings de caixa de camelo:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

Uma solução é usar um delimitador regex: split(foo, r"(?=[A-Z])") mas isso é muito menos intuitivo (e eu não teria resolvido sem ajuda externa).

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

ararslan picture ararslan  ·  3Comentários

manor picture manor  ·  3Comentários

StefanKarpinski picture StefanKarpinski  ·  3Comentários

Keno picture Keno  ·  3Comentários

thofma picture thofma  ·  3Comentários