Get a sublist in Haskell

前端 未结 4 2071
死守一世寂寞
死守一世寂寞 2021-02-18 20:50

Probably an easy one, but I\'ve looked through the docs and googled for examples and I\'m still not sure of the answer.

If I have a list like this:

[1,2,         


        
相关标签:
4条回答
  • 2021-02-18 21:19
    > drop 4 (take 9 [1,2,3,4,5,6,7,8,9,0])
    
    [5,6,7,8,9]
    
    0 讨论(0)
  • 2021-02-18 21:20

    First of all, that's not an array, it's a list. I'm not being (merely) pedantic, as arrays are much more problematic in Haskell than lists.

    That said, one common way is to use take and drop together:

    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]
    

    The latter is a bit more efficient.

    0 讨论(0)
  • 2021-02-18 21:22

    You may be interested in 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]
    

    Note that slice in Data.Vector takes as inputs the beginning index and the length of the slice.

    0 讨论(0)
  • 2021-02-18 21:33

    Hmmm, not very practical, but maybe it can be improved?

    (\(x,y) -> if 4 <= y && y <= 9 then [x] else []) =<< zip [1,2,3,4,5,6,7,8,9] [0..]
    
    0 讨论(0)
提交回复
热议问题