我正在原型化我将如何处理F#数组中的Double.NaN值,并且第一步,试图简单地计算有多少值,让我难过.值"howMany"在我的代码中返回为零,但我知道有2,因为我将2的值设置为Double.NaN.任何人都可以指出我错过了什么?谢谢!
let rnd = new System.Random()
let fakeAlphas = Array.init 10 (fun _ -> rnd.NextDouble());;
fakeAlphas.[0] <- Double.NaN;
fakeAlphas.[1] <- Double.NaN;
let countNA arr = arr |> Array.filter (fun x -> x = Double.NaN) |> Array.length;;
let howMany = countNA fakeAlphas;;
Run Code Online (Sandbox Code Playgroud)
Bri*_*ian 10
要回答标题中的一般问题:
let HowManySatisfy pred = Seq.filter pred >> Seq.length
Run Code Online (Sandbox Code Playgroud)
例如
let nums = [1;2;3;4;5]
let countEvens = nums |> HowManySatisfy (fun n -> n%2=0)
printfn "%d" countEvens
Run Code Online (Sandbox Code Playgroud)
我认为你需要使用Double.IsNan方法.所以你的过滤功能是:
(fun x -> Double.IsNan x)
Run Code Online (Sandbox Code Playgroud)
我相信问题是NaN永远不会等于任何东西 - 甚至是另一个NaN!