我决定编写一个Series.choose函数,类似于我们在Seq上编写的函数,我想知道您是否认为这是编写该函数的最佳方法,请回到Seq,因为那里有一个函数
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
谢谢
答案 0 :(得分:3)
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
答案 1 :(得分:0)
这是我为“工具箱”编写的内容。以防万一它节省了以后给别人的时间...
/// Choose only on values keeping the same keys
let chooseV (f: 'V -> 'U option) (e : Series<'K,'V>) =
e |> Series.mapAll (fun _ (Some v) -> f v)
|> Series.dropMissing
/// Choose on both keys and values, changing the keys to type 'J
let chooseKV (f: 'K * 'V -> ('J * 'U) option) (e : Series<'K,'V>) =
e |> Series.mapAll (fun k (Some v) -> f (k, v))
|> Series.dropMissing
|> fun e1 -> e1.SelectKeys (fun kvp -> fst kvp.Value.Value)
|> Series.mapValues snd
/// Choose on just the values using the keys in the function
let choose (f: 'K * 'V -> ('K * 'U) option) (e : Series<'K,'V>) =
e |> Series.mapAll (fun k (Some v) -> f (k, v))
|> Series.dropMissing
|> Series.mapValues snd