Skip to content

Commit 626bdd4

Browse files
committed
Refactoring largest_by_key
1 parent c3d14c4 commit 626bdd4

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/k_smallest.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use alloc::vec::Vec;
2-
use core::cmp::{Ordering, Reverse};
2+
use core::cmp::Ordering;
33

44
/// Consumes a given iterator, returning the minimum elements in **ascending** order.
55
pub(crate) fn k_smallest_general<I, F>(mut iter: I, k: usize, mut comparator: F) -> Vec<I::Item>
@@ -95,9 +95,10 @@ where
9595
move |a, b| cmp(b, a)
9696
}
9797

98-
pub(crate) fn reverse_key<T, K, F>(f: F) -> impl Fn(&T) -> Reverse<K>
98+
pub(crate) fn key_to_cmp<T, K, F>(key: F) -> impl Fn(&T, &T) -> Ordering
9999
where
100100
F: Fn(&T) -> K,
101+
K: Ord,
101102
{
102-
move |a| Reverse(f(a))
103+
move |a, b| key(a).cmp(&key(b))
103104
}

src/lib.rs

+3-4
Original file line numberDiff line numberDiff line change
@@ -2990,7 +2990,7 @@ pub trait Itertools: Iterator {
29902990
Self: Sized,
29912991
F: Fn(&Self::Item, &Self::Item) -> Ordering,
29922992
{
2993-
crate::k_smallest::k_smallest_general(self, k, cmp).into_iter()
2993+
k_smallest::k_smallest_general(self, k, cmp).into_iter()
29942994
}
29952995

29962996
/// Return the elements producing the k smallest outputs of the provided function
@@ -3005,7 +3005,7 @@ pub trait Itertools: Iterator {
30053005
F: Fn(&Self::Item) -> K,
30063006
K: Ord,
30073007
{
3008-
self.k_smallest_by(k, |a, b| key(a).cmp(&key(b)))
3008+
self.k_smallest_by(k, k_smallest::key_to_cmp(key))
30093009
}
30103010

30113011
/// Sort the k largest elements into a new iterator, in descending order.
@@ -3052,8 +3052,7 @@ pub trait Itertools: Iterator {
30523052
F: Fn(&Self::Item) -> K,
30533053
K: Ord,
30543054
{
3055-
let key = crate::k_smallest::reverse_key(key);
3056-
self.k_smallest_by_key(k, key)
3055+
self.k_largest_by(k, k_smallest::key_to_cmp(key))
30573056
}
30583057

30593058
/// Collect all iterator elements into one of two

0 commit comments

Comments
 (0)