Clojure中如何在字符串列表中检索指定子串是否存在
实现方案
核心思路
遍历列表中的每一个字符串元素,检查指定子串是否存在于该元素内,只要任意一个元素满足条件即返回真值。
Common Lisp 实现
Common Lisp 内置的search函数可用于查询子串位置,找不到子串时返回nil,配合你提到的some函数即可实现需求:
;; 查询子串"h"是否存在于列表任意元素中 (some (lambda (str) (search "h" str)) '("hi" "hey" "hello"))
上述代码只要找到任意一个包含子串的元素,就会直接返回子串的起始索引(等效于逻辑真),遍历完所有元素都没找到则返回nil。
你也可以封装成通用的复用函数,额外增加类型判断避免列表存在非字符串元素时报错:
(defun has-substring-in-list (substr str-list) (some (lambda (item) (and (stringp item) (search substr item))) str-list)) ;; 调用示例 (has-substring-in-list "h" '("hi" "hey" "hello")) ; 返回非nil,代表存在 (has-substring-in-list "x" '("hi" "hey" "hello")) ; 返回nil,代表不存在
Scheme 实现
如果是R7RS标准的Scheme,可以使用内置的string-contains函数实现:
(some (lambda (str) (string-contains str "h")) '("hi" "hey" "hello"))
内容的提问来源于stack exchange,提问作者smorgan
相关产品推荐
相关产品推荐

