F#如何计算列表中符合某些条件的元素数量?

gh.*_*gh. 4 f#

我正在原型化我将如何处理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)


Nat*_*ers 9

Double.NaN = n对所有人都是假的.请参阅Double.NaN 的MSDN页面.

而是使用Double.IsNaN.有关更多信息,请参阅MSDN页面.


pbl*_*cci 8

我认为你需要使用Double.IsNan方法.所以你的过滤功能是:

(fun x -> Double.IsNan x)
Run Code Online (Sandbox Code Playgroud)

我相信问题是NaN永远不会等于任何东西 - 甚至是另一个NaN!

  • 怎么样的'Double.IsNan`而不是`(fun x - > Double.IsNan x)`? (4认同)