Clojure - 适用于除第 n 个元素之外的所有元素

标签 clojure

我有一个如下所示的向量:

[ "1" "2" "3" "4" ]

我希望编写一个函数,将向量返回到:

[ 1 "2" 3 4 ]
; Note that the second element is still a string

请注意,没有任何更改,而是返回一个全新的向量。在 Clojure 中执行此操作的最简单方法是什么?

最佳答案

map 索引是一个不错的选择。调用您传递的函数,其中包含输入中的一项的值以及找到它的索引(索引优先)。该函数可以选择生成一个新值或返回现有值。

user> (map-indexed (fn [i v]
                     (if-not (= 1 i)
                       (Integer/parseInt v)
                       v))
                   [ "1" "2" "3" "4"])
(1 "2" 3 4)

if 返回 v 时,它与结果映射中的值完全相同,因此您可以在选择保留的部分中保留结构共享的优势。如果您希望输出保留为向量,那么您可以使用 mapv 并自行传递索引序列。

user> (mapv (fn [i v]
              (if-not (= 1 i)
                (Integer/parseInt v)
                v))
            (range)
            [ "1" "2" "3" "4"])
[1 "2" 3 4]

有很多种写法

关于Clojure - 适用于除第 n 个元素之外的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30873002/

相关文章:

file - 使 Clojure 识别并隔离文件中的行

clojure - 在 clojure 中,函数参数类型不匹配

clojure - 为什么我不能使用正则表达式来验证字符串作为映射键?

xml - 使用 Clojure 解析 .mxl 文件

clojure - Clojure 可以不用 let 吗?

postgresql - 使用 clojure.java.jdbc/db-do-prepared 检查 uuid 是否存在于 PostgreSQL 表中失败

loops - "dotimes"和 "for"功能之间交叉吗?

clojure - 在 Clojure 中使用平面文件作为数据存储和引用作为表?

jdbc - clojure sqlkorma 库 : out of memory error

scala - Clojure 的 'let' 在 Scala 中等效