2017-10-21 2 views
2

Ich habe fünf verschiedene Typen:F # Verfahrgeschwindigkeit Liste verschiedenen Typen

type Name  = string 
type PhoneNumber = int 
type Sex   = string 
type YearOfBirth = int 
type Interests = string list 
type Client  = Name * PhoneNumber * Sex * YearOfBirth * Interests 

Welche Kunden darstellen. Dann lassen Sie uns sagen, dass ich drei dieser Kunden haben:

let client1 = "Jon", 37514986, "Male", 1980, ["Cars"; "Sexdolls"; "Airplanes"] 
let client2 = "Jonna", 31852654, "Female", 1990, ["Makeup"; "Sewing"; "Netflix"] 
let client3 = "Jenna", 33658912, "Female", 1970, ["Robe Swinging"; "Llamas"; "Music"] 
let clients = [client1; client2; client3] 

Wie würde ich mich über ein bestimmtes Element durch clients gesucht? Sag mal, ich habe eine Methode, bei der ich die Namen der Kunden mit dem gleichen Geschlecht wie ich bekommen möchte? Ich habe die folgende Funktion geschrieben, um zumindest zu bestimmen, ob das eingegebene Geschlecht das gleiche ist, aber das es anscheinend nicht schneidet.

let rec sexCheck sex cs = 
match cs with 
| [] -> [] 
| c::cs -> if sex = c then sex else sexCheck sex cs 

sexCheck "Male" clients 

Irgendwelche Hinweise?

Antwort

4

Sie können die Ergebnisse in einem anderen Parameter akkumulieren, wie folgt aus:

let sexCheck sex cs = 
    let rec loop acc (sex:string) cs = 
     match cs with 
     | [] -> acc 
     | ((_, _, s, _, _) as c)::cs -> loop (if sex = s then c::acc else acc) sex cs 
    loop [] sex cs 

Wie üblich möchte ich Sie daran erinnern, was ist der einfachste Weg, indem Sie die zur Verfügung gestellten Funktionen in F # mit:

clients |> List.filter (fun (_, _, c, _, _) -> c = "Male")