clojure - 向量中的单个重复项
问题描述
给定一个从 1 到 10 且大小为 5 的整数列表,如何检查列表中是否只有 2 个相同的整数?
例如
(check '(2 2 4 5 7))
产生是的,而
(check '(2 1 4 4 4))
或者
(check '(1 2 3 4 5))
产量不
解决方案
这是一个解决方案,使用频率来计算出现次数并过滤以计算仅出现两次的值的数量:
(defn only-one-pair? [coll]
(->> coll
frequencies ; map with counts of each value in coll
(filter #(= (second %) 2)) ; Keep values that have 2 occurrences
count ; number of unique values with only 2 occurrences
(= 1))) ; true if only one unique val in coll with 2 occurrences
这使:
user=> (only-one-pair? '(2 1 4 4 4))
false
user=> (only-one-pair? '(2 2 4 5 7))
true
user=> (only-one-pair? '(1 2 3 4 5))
false
函数中的中间步骤以了解其工作原理:
user=> (->> '(2 2 4 5 7) frequencies)
{2 2, 4 1, 5 1, 7 1}
user=> (->> '(2 2 4 5 7) frequencies (filter #(= (second %) 2)))
([2 2])
user=> (->> '(2 2 4 5 7) frequencies (filter #(= (second %) 2)) count)
1
根据建议,该函数可以使用更具描述性的名称,最好的做法是给谓词函数一个 ? 在 Clojure 的最后。所以也许只有一对?总比检查好。
推荐阅读
- mongodb - MongoDB Atlas 扫描对象/以固定大小的聚合结果返回
- python - 我对 PyQt5.QtWidgets 有疑问
- r - Replacing a value in R data frame based on condition
- linux - 如何将 lsusb 列出的 USB 设备与 dmesg 显示的 USB 序列号匹配?
- python - 是否可以在 SciKit Learn Pipeline 中有条件语句?
- java - 为什么 Javers 将我的审计实体的 ID 存储在引号中?
- reactjs - 如何确保刷新页面后状态立即更新?
- python - 删除括号是删除逗号后的所有内容 - str.get
- testing - 如何在 Testcafe 中启用登录
- laravel - Laravel 8 Model函数获取字段名称