summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authoradisbladis <adisbladis@gmail.com>2020-11-24 06:20:01 +0100
committeradisbladis <adisbladis@gmail.com>2020-11-24 14:31:54 +0100
commit85605c8a296bd54e9c12e1bd1c33bf1e100d40b7 (patch)
tree4501dd994f969bfd7b8d4ffdda157cecbc8c8ef6 /lib
parent8d8532cd32d05c0813db78db4b6043115bf06417 (diff)
lib.lists.unique: Switch from recursive function to using a fold
This improves performance by ~30-40% for smaller test cases and makes larger cases where my laptop would OOM pass in seconds.
Diffstat (limited to 'lib')
-rw-r--r--lib/lists.nix8
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/lists.nix b/lib/lists.nix
index 6c97e0686aa8..06cee2eb112a 100644
--- a/lib/lists.nix
+++ b/lib/lists.nix
@@ -640,13 +640,7 @@ rec {
unique [ 3 2 3 4 ]
=> [ 3 2 4 ]
*/
- unique = list:
- if list == [] then
- []
- else
- let
- x = head list;
- in [x] ++ unique (remove x list);
+ unique = foldl' (acc: e: if elem e acc then acc else acc ++ [ e ]) [];
/* Intersects list 'e' and another list. O(nm) complexity.