数组 – 如何使用Data.Vector.Generic.Mutable进行排序?
如何排序从大文件中读取的长列表数据(字符串,浮点等)
(说几百万行)使用Data.Vector.Generic.Mutable对象和排序算法 从Data.Vector.Algorithms? 解决方法
在一般情况下,这是如何做到的.
首先,你需要一个可变的向量.你可以逐渐建立这个 无论如何,我太懒了,所以我只是要创建一个向量 我们需要一堆图书馆: import Control.Monad import System.Random import qualified Data.Vector as IV import qualified Data.Vector.Mutable as MV import qualified Data.Vector.Generic as V import qualified Data.Vector.Algorithms.Intro as VA 我们不需要这一切,但我们最终需要它,所以我 无论如何,我们的可变向量将是一个“正常”可变向量, 可变向量的想法是创建它并修改它 处理可变数据的另一种方法是在其中进行 (Data.Vector.Mutable为您提供了两个预定义的矢量类型, 所以就像前面8段,我们将要创建一个可变向量 randVector :: IO (MV.IOVector Int) randVector = do v <- MV.new 10 forM [0..9] $x -> do r <- randomIO :: IO Int MV.write v x r return v 这是一个IO操作,返回一个10个随机的新的可变向量 这其实是很难的.做排序,我进口 创建随机可变向量并将其排序的动作 sort = VA.sort =<< randVector 现在,要打印出来,我们需要做的就是将“载入”进入 以下是我想出的例子: main = do v <- randVector VA.sort v iv <- V.unsafeFreeze v :: IO (IV.Vector Int) print . V.toList $iv V.unsafeFreeze来自Data.Vector.Generic(你如何交互 无论如何,值得注意的是,IO完全是为了方便起见. 使用STVector的类似示例: randVector :: ST s (Vector Int) randVector = do vec <- new 10 rand <- newSTRef 17 forM_ [0..9] $index -> do randN <- readSTRef rand let randN' = (fst . next . mkStdGen) randN writeSTRef rand randN' write vec index randN' unsafeFreeze vec 然后运行: *Main> runST randVector fromList [679560,1422110406,306332632,1905242129,692062628,393451229,355476175,1240028023,873588529,1181443777] :: Data.Vector.Vector (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |