diff options
author | Silvan Mosberger <contact@infinisil.com> | 2021-12-02 19:34:08 +0100 |
---|---|---|
committer | Silvan Mosberger <contact@infinisil.com> | 2022-03-18 00:05:10 +0100 |
commit | 1ad7812c4ac038b653dd57b887c7c07d02bf1bec (patch) | |
tree | f280b79d5cbb4bf8d430334867899b42ecd3f667 /lib/lists.nix | |
parent | 71b130c581c81bf3bd2a3c777f7cc11d746327ae (diff) | |
download | nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar.gz nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar.bz2 nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar.lz nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar.xz nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.tar.zst nixpkgs-1ad7812c4ac038b653dd57b887c7c07d02bf1bec.zip |
lib.lists: Use builtins.groupBy for lib.groupBy
builtins.groupBy is much more performant. It was introduced in https://github.com/NixOS/nix/pull/5715
Diffstat (limited to 'lib/lists.nix')
-rw-r--r-- | lib/lists.nix | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/lists.nix b/lib/lists.nix index 1dbff7668d7..a030280c8dc 100644 --- a/lib/lists.nix +++ b/lib/lists.nix @@ -4,6 +4,7 @@ let inherit (lib.strings) toInt; inherit (lib.trivial) compare min; + inherit (lib.attrsets) mapAttrs; in rec { @@ -340,15 +341,15 @@ rec { groupBy' builtins.add 0 (x: boolToString (x > 2)) [ 5 1 2 3 4 ] => { true = 12; false = 3; } */ - groupBy' = op: nul: pred: lst: - foldl' (r: e: - let - key = pred e; - in - r // { ${key} = op (r.${key} or nul) e; } - ) {} lst; + groupBy' = op: nul: pred: lst: mapAttrs (name: foldl op nul) (groupBy pred lst); - groupBy = groupBy' (sum: e: sum ++ [e]) []; + groupBy = builtins.groupBy or ( + pred: foldl' (r: e: + let + key = pred e; + in + r // { ${key} = (r.${key} or []) ++ [e]; } + ) {}); /* Merges two lists of the same size together. If the sizes aren't the same the merging stops at the shortest. How both lists are merged is defined |