summary refs log tree commit diff
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
parent8d8532cd32d05c0813db78db4b6043115bf06417 (diff)
downloadnixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar.gz
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar.bz2
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar.lz
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar.xz
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.tar.zst
nixpkgs-85605c8a296bd54e9c12e1bd1c33bf1e100d40b7.zip
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.
-rw-r--r--lib/lists.nix8
1 files changed, 1 insertions, 7 deletions
diff --git a/lib/lists.nix b/lib/lists.nix
index 6c97e0686aa..06cee2eb112 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.