📜  从列表中删除第 n 个元素 haskell (1)

📅  最后修改于: 2023-12-03 14:49:21.943000             🧑  作者: Mango

从列表中删除第 n 个元素

在Haskell中,我们可以使用标准库提供的 delete 函数来删除列表中的元素。但是,该函数删除的是指定元素的所有出现次数,而非指定索引位置上的元素。因此,我们需要自己实现一个函数来删除列表中的指定位置元素。

以下是一个示例函数 deleteNth 的实现:

deleteNth :: Int -> [a] -> [a]
deleteNth n xs = case splitAt n xs of
    (_, []) -> xs     -- 目标索引超出列表长度,返回原列表
    (ys, _ : zs) -> ys ++ zs    -- 已将指定位置元素删去,返回新列表

这个函数接受一个整数 n 和一个列表 xs,并返回一个新列表,该新列表中已将列表 xs 中索引位置为 n 的元素删除。如果目标索引超出列表长度,则直接返回原列表。

我们可以使用该函数来删除任何列表中的元素。例如,以下代码演示了如何从列表 [1,2,3,4,5] 中删除索引位置为 2 的元素:

deleteNth 2 [1,2,3,4,5]   -- 返回 [1,2,4,5]

需要注意的是,Haskell 中的列表是不可变的,因此我们在删除元素时实际上是创建了一份新的列表。因此,如果需要反复在同一个列表中删除元素,则需要向函数参数中传递新的列表。

以上就是在 Haskell 中从列表中删除第 n 个元素的方法。