我需要以下数据结构:
在具有内存插槽的设备中,每个插槽都有一组参数。这些参数有不同的类型。可能的参数列表是固定的,因此不需要通用的灵活性»支持任意参数而无需改变«。而且,对于每个参数,内容的结构是已知的。典型的用例是检索和修改一个特定参数,以及将完整参数集转换为不同(但已定义)的数据结构。
F#数据结构的自然选择将是这样的总和类型:
type SomeParameterContentType = { Field1 : string, Field2 : int }
type SomeOtherParameterContentType = { Other1 : bool option, Other2 : double }
type Parameter =
| SomeParameter of SomeParameterContentType
| SomeOtherParameter of SomeOtherParameterContentType
这样我就可以创建一个集合并在那里存储一个非常好的数据结构。这里的问题是:鉴于这个想法,如何寻找一个特定的参数?我不知道为set的find-function指定谓词的任何方法。有可能定义另一个和类型列出参数类型而没有它们的内容,使用它作为词典的键,但我不太喜欢这个想法。使用字符串而不是第二个和类型并不能使事情变得更好,因为它仍然需要提供两次可能的参数列表。
有没有人有更好的主意?
THX --Mathias。
答案 0 :(得分:0)
听起来你想要的只是一个Set的tryFind:
module Set =
let tryFind p =
Set.toList >> List.tryFind p
用法:
let mySet = Set.ofList [1;2;3;4;5]
let m = mySet |> Set.tryFind (fun t -> t = 2)
val m:int option = Some 2
使用您的类型:
let yourSet = Set.ofList [SomeParameter {Field1="hello";Field2=3}]
let mYours = yourSet |> Set.tryFind (fun t -> match t with
|SomeParameter p -> true
|SomeOtherParameter p -> false)
val mYours:参数选项= Some(SomeParameter {Field1 =“hello”; Field2 = 3;})