8 people like it.

Pluck and TryPluck

Functions to select the first element in an array that passes some predicate, and separately all the other array elements. (I'm not sure if this type of operation has a standard name. Please tweet me if you know!)

 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
module Array =

   /// Returns a tuple containing the first element in
   /// the input array for which f returns true, and
   /// a new array containing all input elements apart
   /// from the selected one.  It is an error for
   /// no element to be found.
   let pluck f a =
      let hit = Array.find f a
      let remainder = 
         a |> Array.filter (fun x -> x <> hit)
      hit, remainder

   /// Returns Some tuple containing the first element in
   /// the input array for which f returns true, and
   /// a new array containing all input elements apart
   /// from the selected one.  If no element is found
   /// returns None.
   let tryPluck f a =
      let hit = Array.tryFind f a
      match hit with
      | Some h ->
         let remainder = 
            a |> Array.filter (fun x -> x <> h)
         Some (h, remainder)
      | None -> None
module Array

from Microsoft.FSharp.Collections
val pluck : f:('a -> bool) -> a:'a [] -> 'a * 'a [] (requires equality)

Full name: Script.Array.pluck


 Returns a tuple containing the first element in
 the input array for which f returns true, and
 a new array containing all input elements apart
 from the selected one. It is an error for
 no element to be found.
val f : ('a -> bool) (requires equality)
val a : 'a [] (requires equality)
val hit : 'a (requires equality)
val find : predicate:('T -> bool) -> array:'T [] -> 'T

Full name: Microsoft.FSharp.Collections.Array.find
val remainder : 'a [] (requires equality)
val filter : predicate:('T -> bool) -> array:'T [] -> 'T []

Full name: Microsoft.FSharp.Collections.Array.filter
val x : 'a (requires equality)
val tryPluck : f:('a -> bool) -> a:'a [] -> ('a * 'a []) option (requires equality)

Full name: Script.Array.tryPluck


 Returns Some tuple containing the first element in
 the input array for which f returns true, and
 a new array containing all input elements apart
 from the selected one. If no element is found
 returns None.
val hit : 'a option (requires equality)
val tryFind : predicate:('T -> bool) -> array:'T [] -> 'T option

Full name: Microsoft.FSharp.Collections.Array.tryFind
union case Option.Some: Value: 'T -> Option<'T>
val h : 'a (requires equality)
union case Option.None: Option<'T>
Raw view Test code New version

More information

Link:http://fssnip.net/pl
Posted:9 years ago
Author:Kit Eason
Tags: collections , arrays