mapAll
- это почти то, что вам нужно, он просто имеет немного другую подпись (и, в частности, не может изменить ключи).Если вам нужно поменять ключи, это становится сложнее, но все равно не требуется проходить через Seq
.Это также зависит от того, как вы хотите обработать пропущенные значения в e
.
Не проверено (потому что у меня нет Visual Studio здесь), и предполагает, что e
не имеет пропущенных значений, но должно датьидея:
let choose (f: 'K * 'V -> ('K * 'U) option) (e : Series<'K,'V>) =
e |> Series.mapAll (fun k (Some v) -> f (k, v)) // Series<'K, ('K, 'U)>
|> Series.dropMissing // drops cases where f returned None
|> fun e1 -> e1.SelectKeys (fun kvp -> fst kvp.Value.Value) // changes the keys to the ones f returned
|> Series.mapValues snd // removes the keys from the values