我正在原型化我将如何处理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;;
答案 0 :(得分:10)
回答标题中的一般问题:
let HowManySatisfy pred = Seq.filter pred >> Seq.length
例如
let nums = [1;2;3;4;5]
let countEvens = nums |> HowManySatisfy (fun n -> n%2=0)
printfn "%d" countEvens
答案 1 :(得分:9)
Double.NaN = n
都是假的。有关Double.NaN的信息,请参阅the MSDN page。
而是使用Double.IsNaN
。有关详细信息,请参阅the MSDN page。
答案 2 :(得分:8)
我认为您需要使用Double.IsNan方法。所以你的过滤功能是:
(fun x -> Double.IsNan x)
我认为问题在于NaN永远不会等于任何东西 - 甚至是另一个NaN!