F#查找具有某些条件的字典条目

Joh*_*ohn 0 f#

let dTuples = new Dictionary<int, string * string * int>()
dTuples.Add(1, ("A", "OK", 1))
dTuples.Add(2, ("B", "NOK", 2))
dTuples.Add(3, ("C", "OK", 3))
Run Code Online (Sandbox Code Playgroud)

我想在字典中找到它们在值部分的第二个元素中具有"OK"的项目.我还想将结果转换为元组数组而不使用字典的关键部分.对于上面的例子,我需要这个:

let tuplesOK = [| ("A", "OK", 1); ("C", "OK", 3) |]
Run Code Online (Sandbox Code Playgroud)

如果您提供代码,请同时添加一些解释,以便我更好地理解它!谢谢,约翰

Dan*_*iel 5

要检查匹配"OK"的第二个元组项:

dTuples |> Seq.filter (fun (KeyValue(_, (_,ok,_))) -> ok = "OK") |> Seq.toArray
Run Code Online (Sandbox Code Playgroud)

获取元组数组(不带键):

dTuples.Values |> Seq.toArray
Run Code Online (Sandbox Code Playgroud)

如果您不需要可变性,可以使用dict [MSDN]运算符更简洁地构建字典.

let dTuples = 
  dict [
    1, ("A", "OK", 1)
    2, ("B", "NOK", 2)
    3, ("C", "OK", 3)
  ]
Run Code Online (Sandbox Code Playgroud)

我不会把它变成教程.代码非常明显,任何差距都可以通过快速搜索MSDN来填补.