Имеем этот пример:
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)
Возможно ли иметь единственную функцию, которая выполняет отображение и фильтрацию за один вызов? Типа Array.mapfilter
(это не сокращение , потому что у меня нет аккумулятора, или, может быть, это решение?!)
Или есть альтернативная реализация (кроме для l oop), чтобы избежать использования промежуточных Option и 3 вызовов функций массива?