From 83744bb43d741c32066fe81a6cc7a4a397717f63 Mon Sep 17 00:00:00 2001 From: Jan Uhlig Date: Wed, 3 May 2023 10:39:31 +0200 Subject: Use map generator in sets:filter/2 for version 2 sets --- lib/stdlib/src/sets.erl | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/lib/stdlib/src/sets.erl b/lib/stdlib/src/sets.erl index 816fb85a48..dccc6dcf3a 100644 --- a/lib/stdlib/src/sets.erl +++ b/lib/stdlib/src/sets.erl @@ -466,23 +466,12 @@ fold_1(Fun, Acc, Iter) -> Set1 :: set(Element), Set2 :: set(Element). filter(F, #{}=D) when is_function(F, 1)-> - maps:from_keys(filter_1(F, maps:iterator(D)), ?VALUE); + %% For this purpose, it is more efficient to use + %% maps:from_keys than a map comprehension. + maps:from_keys([K || K := _ <- D, F(K)], ?VALUE); filter(F, #set{}=D) when is_function(F, 1)-> filter_set(F, D). -filter_1(Fun, Iter) -> - case maps:next(Iter) of - {K, _, NextIter} -> - case Fun(K) of - true -> - [K | filter_1(Fun, NextIter)]; - false -> - filter_1(Fun, NextIter) - end; - none -> - [] - end. - %% get_slot(Hashdb, Key) -> Slot. %% Get the slot. First hash on the new range, if we hit a bucket %% which has not been split use the unsplit buddy bucket. -- cgit v1.2.1