将元素添加到列表中

时间:2011-03-13 21:46:10

标签: haskell

我想编写一个函数,按照正确的顺序将一个项目添加到列表中,在1中说[2, 3]。我是haskell的新手,如果不使用Ord就需要帮助。

2 个答案:

答案 0 :(得分:2)

如果不使用Ord,您的问题就毫无意义。

使用Ord,您想要的功能是insert

  

insert函数接受一个元素和一个列表,并将该元素插入到列表中最后一个位置,它仍然小于或等于下一个元素。

答案 1 :(得分:1)

编写将元素插入到排序列表中的函数并不难。它看起来像这样:

insert :: Ord a => a -> [a] -> [a]

insert x [] = [x]

insert x (y:ys)
    | x > y     = y : insert x ys
    | otherwise = x : y : ys

但是,这对您的用例来说不太可能有效。列表的问题在于,您最终会因此类插入问题而反复创建大部分脊椎的新副本。您还必须在列表中线性扫描,直到找到正确的位置,这不是搜索正确位置的最快方法。

使用Data.Set或Data.IntSet中的数据结构可能会更好。这些通常是O(log n)用于插入,因为它们使用树或其他数据结构,允许比列表更多共享,并快速找到正确的位置。