clojure - 按公共子字符串对字符串列表进行分组
问题描述
我有一个字符串列表,例如:
("2019_FOO_BAR.1_12"
"2019_FOO_BAR.1_13"
"2018_FOO_BAR.1_12"
"2019_FOO_XYZ.1_14"
"2017_FOO_BAR.1_14"
"2017_FOO_XYZ.1_12"
"2019_FOO_XYZ.1_13")
我想在第一个下划线和点之前按公共子字符串对它们进行分组。
在这个例子中,我有 2 个唯一的子字符串 FOO_BAR 和 FOO_XYZ。但更长的列表可能有 N 个唯一的子字符串。
我希望结果如下所示:
(["2019_FOO_BAR.1_12" "2019_FOO_BAR.1_13" "2018_FOO_BAR.1_12" "2017_FOO_BAR.1_14"]
["2017_FOO_XYZ.1_12" "2019_FOO_XYZ.1_13" "2019_FOO_XYZ.1_14"])
所以每个子字符串都分组在一个单独的列表中
解决方案
我想你正在寻找一个group-by
(def test-data '("2019_FOO_BAR.1_12"
"2019_FOO_BAR.1_13"
"2018_FOO_BAR.1_12"
"2019_FOO_XYZ.1_14"
"2017_FOO_BAR.1_14"
"2017_FOO_XYZ.1_12"
"2019_FOO_XYZ.1_13"))
(defn string-to-key [^String input-string]
(let [first-spliter (.indexOf input-string "_" )
second-spliter (.indexOf input-string "." )]
(.subSequence input-string (+ 1 first-spliter) second-spliter)))
所以你可以得到你正在寻找的东西:
(vals (group-by string-to-key test-data))
推荐阅读
- reactjs - 根据反应虚拟化表中的条件为列单元格文本添加颜色
- jenkins - 如何让 Jenkins 在从 bitbucket 轮询后自动构建,而不是手动构建具有特定参数的作业
- android - Xamarin Android 应用程序流量有时不会出现在 Charles Proxy 上
- excel - 使用 OleDbConnection 时忽略空单元格或空单元格?
- python - 虽然应该有,但在字符串中找不到匹配项
- python-3.x - KeyError: 'access_token' 在 OAuth 2.0 身份验证期间使用 Spotify API
- elasticsearch - ElasticSearch 的重新索引 api 完成后,我的目标索引的状态是什么?
- unity3d - 如何使特定的预制件在按下按钮时旋转?
- javascript - 使用 Firestore REST API 在结构化查询中设置“orderBy”
- java - Spring 将 fixedRateString 安排为 Duration