You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Clojure:实现取元组第二个元素最大值对应元组首元素,求惯用写法

更符合Clojure惯用风格的实现方式

你的需求是找出元组列表中第二个元素最大的元组,并返回该元组的第一个元素。原代码运行正常,但可以用更贴合Clojure函数式风格的方式实现,同时提升效率:

优化实现

基础版本

(defn get-top-card [cards]
  (first (apply max-key second cards)))

(get-top-card [[1 14] [3 24] [2 12] [4 24]]) ; 返回3

处理空列表的健壮版本

如果需要兼容空列表的场景,避免调用apply时出错,可以添加空值判断:

(defn get-top-card [cards]
  (when-not (empty? cards)
    (first (apply max-key second cards))))

为什么这更符合Clojure风格?

  • 更简洁高效:max-key是Clojure内置的高阶函数,专门用于按指定键筛选最大值元素,整个过程只需要遍历一次列表,避免了原代码中两次遍历+索引查找的重复计算。
  • 更函数式:原代码依赖Java的.indexOf方法处理索引,而优化后的实现完全用Clojure原生函数完成,更贴合函数式编程的思维,避免手动处理底层索引细节。
  • 更健壮:max-key能自然处理列表中的元组元素,无需额外处理索引匹配逻辑,降低出错概率。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:54:33