可能是一个简单的,但我查看了文档并搜索了示例,我仍然不确定答案.
如果我有这样的列表:
[1,2,3,4,5,6,7,8,9,0]
Run Code Online (Sandbox Code Playgroud)
我想提取一个切片,比如从索引4到索引8,即我想要:
[5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
在Haskell中这样做的惯用方法是什么?
ibi*_*bid 34
首先,这不是一个数组,它是一个列表.我不是(仅仅)迂腐,因为数组在Haskell中比列表更有问题.
也就是说,一种常见的方式是使用take
和drop
一起:
Prelude> drop 4 . take 9 $ [1,2,3,4,5,6,7,8,9,0]
[5,6,7,8,9]
Prelude> take (9-4) . drop 4 $ [1,2,3,4,5,6,7,8,9,0]
[5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
后者更有效率.
您可能对Data.Vector(slice)感兴趣.
ghci> import Data.Vector
ghci> let v = fromList [1..10]
ghci> v
fromList [1,2,3,4,5,6,7,8,9,10]
ghci> slice 4 5 v
fromList [5,6,7,8,9]
Run Code Online (Sandbox Code Playgroud)
请注意,slice
in Data.Vector
将起始索引和切片长度作为输入.