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#:
有什么办法可以以相同的方式实现中的操作吗?我想出了这个递归解决方案:let rec removeAll (map:Map<string, string>, keys:list<string>) =
match keys with
| [] -> map
| _ -> removeAll(map.Remove(keys |> Seq.head), keys.Tail)
但我怀疑它的效率是否像上面的RemoveRange
一样高。
问题:
- F#中最有效的
RemoveAll
等效方法是什么? - 您认为F#递归优化是否会编译成同样高效的东西?
RemoveRange
吗? - Camilo TerevintoMap<K,V>
没有RemoveRange
方法,因此在这种情况下,我必须先将其转换为ImmutableDictionary<K,V>
,然后再进行转换。 - George Mamaladze