Skip to content

Commit 97bd49b

Browse files
committed
Clarify [T]::select_nth_unstable* return values
In cases where the nth element is not unique within the slice, it is not correct to say that the values in the returned triplet include ones for "all elements" less/greater than that at the given index: indeed one (or more) such values would then laso contain values equal to that at the given index. The text proposed here clarifies exactly what is returned, but in so doing it is also documenting an implementation detail that previously wasn't detailed: namely that the return slices are slices into the reordered slice. I don't think this can be contentious, because the lifetimes of those returned slices are bound to that of the original (now reordered) slice—so there really isn't any other reasonable implementation that could have this behaviour; but nevertheless it's probably best if @rust-lang/libs-api give it a nod? Fixes #97982 r? m-ou-se @rustbot label +A-docs C-bug +T-libs-api
1 parent 1f34da9 commit 97bd49b

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

library/core/src/slice/mod.rs

+14-11
Original file line numberDiff line numberDiff line change
@@ -2628,9 +2628,10 @@ impl<T> [T] {
26282628
/// less than or equal to any value at a position `j > index`. Additionally, this reordering is
26292629
/// unstable (i.e. any number of equal elements may end up at position `index`), in-place
26302630
/// (i.e. does not allocate), and *O*(*n*) worst-case. This function is also/ known as "kth
2631-
/// element" in other libraries. It returns a triplet of the following values: all elements less
2632-
/// than the one at the given index, the value at the given index, and all elements greater than
2633-
/// the one at the given index.
2631+
/// element" in other libraries. It returns a triplet of the following from the reordered slice:
2632+
/// the subslice prior to `index`, the element at `index`, and the subslice after `index`;
2633+
/// accordingly, the values in those two subslices will respectively all be less-than-or-equal-to
2634+
/// and greater-than-or-equal-to the value of the element at `index`.
26342635
///
26352636
/// # Current implementation
26362637
///
@@ -2675,10 +2676,11 @@ impl<T> [T] {
26752676
/// less than or equal to any value at a position `j > index` using the comparator function.
26762677
/// Additionally, this reordering is unstable (i.e. any number of equal elements may end up at
26772678
/// position `index`), in-place (i.e. does not allocate), and *O*(*n*) worst-case. This function
2678-
/// is also known as "kth element" in other libraries. It returns a triplet of the following
2679-
/// values: all elements less than the one at the given index, the value at the given index,
2680-
/// and all elements greater than the one at the given index, using the provided comparator
2681-
/// function.
2679+
/// is also known as "kth element" in other libraries. It returns a triplet of the following from
2680+
/// the slice reordered according to the provided comparator function: the subslice prior to
2681+
/// `index`, the element at `index`, and the subslice after `index`; accordingly, the values in
2682+
/// those two subslices will respectively all be less-than-or-equal-to and greater-than-or-equal-to
2683+
/// the value of the element at `index`.
26822684
///
26832685
/// # Current implementation
26842686
///
@@ -2727,10 +2729,11 @@ impl<T> [T] {
27272729
/// less than or equal to any value at a position `j > index` using the key extraction function.
27282730
/// Additionally, this reordering is unstable (i.e. any number of equal elements may end up at
27292731
/// position `index`), in-place (i.e. does not allocate), and *O*(*n*) worst-case. This function
2730-
/// is also known as "kth element" in other libraries. It returns a triplet of the following
2731-
/// values: all elements less than the one at the given index, the value at the given index, and
2732-
/// all elements greater than the one at the given index, using the provided key extraction
2733-
/// function.
2732+
/// is also known as "kth element" in other libraries. It returns a triplet of the following from
2733+
/// the slice reordered according to the provided key extraction function: the subslice prior to
2734+
/// `index`, the element at `index`, and the subslice after `index`; accordingly, the values in
2735+
/// those two subslices will respectively all be less-than-or-equal-to and greater-than-or-equal-to
2736+
/// the value of the element at `index`.
27342737
///
27352738
/// # Current implementation
27362739
///

0 commit comments

Comments
 (0)