有这个例子:
open FSharp.Data
let jsonStirng = @"[
{""red"": 100, ""green"": 100, ""blue"": 100, ""alpha"": 1.0 },
{""red"": 100, ""green"": 100, ""blue"": 100, ""alpha"": 0.5 },
]"
let getSolidColors jsonString =
let getColor item =
if (item:JsonValue).["alpha"].AsDecimal() < 1m
then Some( {R=item.["red"].AsInteger(); G=item.["green"].AsInteger(); B=item.["blue"].AsInteger()} )
else None
JsonValue.Parse(jsonString).AsArray()
|> Array.map getColor
|> Array.filter (fun x -> x.IsSome)
|> Array.map (fun x -> x.Value)
Run Code Online (Sandbox Code Playgroud)
是否可以有一个函数在一次调用中生成地图和过滤器功能?
有点Array.mapfilter(不是因为我没有累加器而减少,或者这可能是解决方案?!)
或者,有一个替代实现(除了for循环)来避免使用中间Option和 3 Array 函数调用?
当然,你可以这样做:
JsonValue.Parse(jsonString).AsArray()
|> Array.choose getColor
Run Code Online (Sandbox Code Playgroud)