跳过seq <nullable <int>&gt;中的空值在FSharp.Charting中

时间:2017-04-21 03:36:15

标签: f# fsharpchart

我有seq<Nullable<int>>,需要创建好的情节,但没有空值。 这是我的代码:

open System
#r """..\packages\FSharp.Charting.0.90.14\lib\net40\FSharp.Charting.dll"""
#load """..\packages\FSharp.Charting.0.90.14\FSharp.Charting.fsx"""
open FSharp.Charting

//in a real world replaced by .csv with empty values
let seqWithNullInt = seq[Nullable 10 ; Nullable 20  ; Nullable (); Nullable 40; Nullable 50] 
//let seqWithNullInt = seq[ 10 ; 20  ;  30;  40; 50]  //works fine

let bothSeq = seqWithNullInt |> Seq.zip {1..5}

Chart.Line bothSeq // Error because of nullable int 

这是我的愿景:

Expected chart

如何跳过空值?我不想用最近的东西替换它们,我需要从图表中跳过它们。有什么解决方案吗?

1 个答案:

答案 0 :(得分:2)

这样的事情可能有用(注意我使用了Option值而不是nullables,因为这在F#中更为惯用):

let neitherPairHasNoneInValue (pair1, pair2) =
    pair1 |> snd |> Option.isSome && pair2 |> snd |> Option.isSome
let seqWithNone = Seq.ofList [Some 10; Some 20; None; Some 40; Some 50]
let pairsWithoutNone = seqWithNone
                       |> Seq.zip {1..5}
                       |> Seq.pairwise
                       |> Seq.filter neitherPairHasNoneInValue
printfn "%A" pairsWithoutNone

这将输出[(1,10),(2,20) ; (4,40),(5,50)]。我不知道FSharp.Charting API,所以我无法告诉你哪个函数将采用X,Y对的列表并绘制你想要的图形,但它应该相对直截了当从那里到你的图表。