["abc", "def.ghi"] (split-last #"." "abc.def.gh-6ren">
gpt4 book ai didi

Clojure - 编写 split-first 和 split-last 的惯用方式

转载 作者:行者123 更新时间:2023-12-02 21:15:19 25 4
gpt4 key购买 nike

编写以下函数的惯用方式是什么?

(split-first #"." "abc.def.ghi") ;;=>["abc", "def.ghi"]
(split-last #"." "abc.def.ghi") ;;=>["abc.def", "ghi"]

使用 split 有一个明显(丑陋?)的解决方案,但我确定还有更优雅的解决方案?也许使用 regexes/indexOf/split-with?

最佳答案

对于优先拆分,最好的方法是:

(defn split-first [re s]
(clojure.string/split s re 2))

(split-first #"\." "abc.def.ghi")
=> ["abc" "def.ghi"]

(split-first #"<>" "abc<>def<>ghi")
=> ["abc" "def<>ghi"]

split-last 的一种方法是使用否定先行断言:

(defn split-last [re s]
(let [pattern (re-pattern (str re "(?!.*" re ")"))]
(split-first pattern s)))

(split-last #"\." "abc.def.ghi")
=> ["abc.def" "ghi"]

(split-last #"<>" "abc<>def<>ghi")
=> ["abc<>def" "ghi"]

关于Clojure - 编写 split-first 和 split-last 的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31138653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com