on master help sign in
Add a filter function
663f565Evan Czaplicki
libraries/Array.elm+10
@@ -96,6 +96,16 @@ foldl = Native.Array.foldl
96foldr : (a -> b -> b) -> b -> Array a -> b
96foldr : (a -> b -> b) -> b -> Array a -> b
97foldr = Native.Array.foldr
97foldr = Native.Array.foldr
98
98
99+{-| Keep only elements that satisfy the predicate:
100+
101+ filter isEven (fromList [1..6]) == (fromList [2,4,6])
102+-}
103+filter : (a -> Bool) -> Array a -> Array a
104+filter isOkay arr =
105+ let update x xs = if isOkay x then Native.Array.push x xs else xs
106+ in
107+ Native.Array.foldl update Native.Array.empty arr
108+
99{-| Return an empty array.
109{-| Return an empty array.
100
110
101 length empty == 0
111 length empty == 0
tests/elm/Test/Array.elm+1
@@ -43,5 +43,6 @@ tests =
43 , test "foldl" <| assertEqual (Array.foldl (::) [] (Array.fromList [1,2,3])) [3,2,1]
43 , test "foldl" <| assertEqual (Array.foldl (::) [] (Array.fromList [1,2,3])) [3,2,1]
44 , test "foldr" <| assertEqual (Array.foldr (+) 0 (Array.repeat 3 5)) 15
44 , test "foldr" <| assertEqual (Array.foldr (+) 0 (Array.repeat 3 5)) 15
45 , test "foldr 2" <| assertEqual (Array.foldr (::) [] (Array.fromList [1,2,3])) [1,2,3]
45 , test "foldr 2" <| assertEqual (Array.foldr (::) [] (Array.fromList [1,2,3])) [1,2,3]
46+ , test "filter" <| assertEqual (Array.filter (\x -> x `mod` 2 == 0) (Array.fromList [1..6])) (Array.fromList [2,4,6])
46 ]
47 ]
47 in List.concat [creationTests, basicsTests, getAndSetTests, takingArraysApartTests, mappingAndFoldingTests]
48 in List.concat [creationTests, basicsTests, getAndSetTests, takingArraysApartTests, mappingAndFoldingTests]