C#:
在 C# 中,我有这样的东西:
IImmutableDictionary<string, string> map = new Dictionary<string, string>
{
{"K1", "V1"},
{"K2", "V2"},
{"K3", "V3"},
}.ToImmutableDictionary();
IEnumerable<string> keys = new[] {"K1,K3"};
map = map.RemoveRange(keys);
我假设ImmutableDictionary<K,V>.RemoveRange Method (IEnumerable<K>)
引入了该方法,因为它比一系列Remove(K)
调用更有效。它只创建一次生成的不可变对象,而不是为keys
要删除的每个元素创建一次。
F#:
在F#中实现相同目标的最佳方法是什么。我想出了这个递归解决方案:
let rec removeAll (map:Map<string, string>, keys:list<string>) =
match keys with
| [] -> map
| _ -> removeAll(map.Remove(keys |> Seq.head), keys.Tail)
但我怀疑它是否像RemoveRange
上面那样有效。
问题:
RemoveAll
F#中最有效的等价物是什么?- 你认为 F# 递归优化会编译成同样有效的东西吗?