Julia: split() ν–₯상, keep_splitter

에 λ§Œλ“  2017λ…„ 02μ›” 16일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: JuliaLang/julia

μ•ˆλ…•ν•˜μ‹­λ‹ˆκΉŒ,

split(str, splitter; limit=0, keep=true) κΈ°λŠ₯에 λŒ€ν•΄ ν˜„μž¬ μƒˆ λΆ„κΈ°μ—μ„œ μž‘μ—… 쀑인 κΈ°λŠ₯ μš”μ²­μ„ μ œμ•ˆν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

그런 μ‹μœΌλ‘œ κΈ°λŠ₯을 μ‚¬μš©ν•˜λ €κ³  λ…Έλ ₯ν•˜λŠ” μžμ‹ μ„ λ°œκ²¬ν–ˆμœΌλ©° μ–΄λ–»κ²Œ λ“  κΈ°λŒ€ν•˜λŠ” 것은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

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

계속 일해야 ν•˜λ‚˜μš”? μƒνƒœκ³„μ˜ λ‚˜λ¨Έμ§€ 뢀뢄에 획기적인 λ³€ν™”κ°€ μžˆμŠ΅λ‹ˆκΉŒ?

λͺ‡ 가지 아이디어:

  • keep_spliter ν”Œλž˜κ·Έκ°€ true 이면 keep (빈 κ²°κ³Όλ₯Ό λ‚˜νƒ€λƒ„)κ°€ true 이든 false 이든 차이가 μ—†μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ‹€μŒ ν•˜μœ„ λ¬Έμžμ—΄ λ˜λŠ” 이전 ν•˜μœ„ λ¬Έμžμ—΄μ—λ§Œ μŠ€ν”Œλ¦¬ν„°λ₯Ό ν¬ν•¨ν•˜κΈ° μœ„ν•΄ λ‹€λ₯Έ ν”Œλž˜κ·Έλ₯Ό 포함할지 μ—¬λΆ€κ°€ ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것이 readlines(file) μž‘λ™ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. 그렇지 μ•ŠμŠ΅λ‹ˆκΉŒ? λ°°μ—΄μ˜ 각 μš”μ†Œ 끝에 '\n' κ°€ μžˆμŠ΅λ‹ˆλ‹€.
julia> split("abcabcdabbcd", "b"; keep_splitter = true, prepend = false)
3-element Array{SubString{String},1}:
 "ab"   
 "cab" 
 "cdab"
 "b"
 "cd"

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€!

μΆ”μ‹ , μ•„λ§ˆλ„ λ‚΄κ°€ 아직 λͺ¨λ₯΄λŠ” λ‹€λ₯Έ κΈ°λŠ₯으둜 μˆ˜ν–‰ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

collections design strings

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이것은 λ˜ν•œ 낙타 μΌ€μ΄μŠ€ λ¬Έμžμ—΄μ„ λΆ„ν• ν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

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

해결책은 μ •κ·œμ‹ ꡬ뢄 기호 split(foo, r"(?=[A-Z])") λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŠ” 훨씬 덜 μ§κ΄€μ μž…λ‹ˆλ‹€(μ™ΈλΆ€ 도움 μ—†μ΄λŠ” ν•΄κ²°ν•˜μ§€ λͺ»ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€).

λͺ¨λ“  3 λŒ“κΈ€

κ°€λŠ₯ν•œ splitlines ν•¨μˆ˜(https://github.com/JuliaLang/julia/pull/20390) 및 readline / eachline 에 λŒ€ν•œ μƒˆλ‘œμš΄ chomp 인수 κ΄€λ ¨ eachline (https://github.com/JuliaLang/julia/pull/19944, https://github.com/JuliaLang/julia/pull/19944).

μ°Έμ‘°: @mpastell

μ°Έκ³  ν˜„μž¬λ₯Ό λ³΄λŠ” 또 λ‹€λ₯Έ 방법 μžˆμŒμ„ keep ν‚€μ›Œλ“œλŠ” 무엇을 μ§„μ§œλ‘œν•˜λŠ” 일은 λ‹Ήμ‹ μ˜ μŠ€ν”Œλ¦¬ν„°κ°€ 1 번 이상 반볡 ν•  수 μžˆλ‹€λŠ” 말은, 즉 μ•”μ‹œ 적으둜 그것을 포μž₯ (...)+ μ •κ·œμ‹μœΌλ‘œ.

이것은 λ˜ν•œ 낙타 μΌ€μ΄μŠ€ λ¬Έμžμ—΄μ„ λΆ„ν• ν•˜λ €κ³  ν•  λ•Œ λ°œμƒν•©λ‹ˆλ‹€.

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

해결책은 μ •κ·œμ‹ ꡬ뢄 기호 split(foo, r"(?=[A-Z])") λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ΄λŠ” 훨씬 덜 μ§κ΄€μ μž…λ‹ˆλ‹€(μ™ΈλΆ€ 도움 μ—†μ΄λŠ” ν•΄κ²°ν•˜μ§€ λͺ»ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€).

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰