From 80c2b304518aaff534922a923d7eb04ef986a78d Mon Sep 17 00:00:00 2001 From: Philippe-Cholet <44676486+Philippe-Cholet@users.noreply.github.com> Date: Fri, 29 Mar 2024 09:44:28 +0100 Subject: [PATCH] k_smallest(1) and variants: use `min[_by]` Like with `tail(1)`, I think we should leverage a possible faster specialization. --- src/k_smallest.rs | 3 +++ src/lib.rs | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/k_smallest.rs b/src/k_smallest.rs index 97f0ee02a..7b2f62ea1 100644 --- a/src/k_smallest.rs +++ b/src/k_smallest.rs @@ -45,6 +45,9 @@ where iter.last(); return Vec::new(); } + if k == 1 { + return iter.min_by(comparator).into_iter().collect(); + } let mut iter = iter.fuse(); let mut storage: Vec = iter.by_ref().take(k).collect(); diff --git a/src/lib.rs b/src/lib.rs index 65909fcdd..ff14cf94e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -2975,6 +2975,9 @@ pub trait Itertools: Iterator { self.last(); return Vec::new().into_iter(); } + if k == 1 { + return self.min().into_iter().collect_vec().into_iter(); + } let mut iter = self.fuse(); let mut heap: BinaryHeap<_> = iter.by_ref().take(k).collect();