{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreiewg4nehslx76tr6inkmobyokuprcyl5zixf2zk7pzcr6u47dwywa",
"uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mjljlocz6xj2"
},
"path": "/t/t-sort-by-index-and-t-sort-by-key-and-index/24172#post_11",
"publishedAt": "2026-04-16T02:43:44.000Z",
"site": "https://internals.rust-lang.org",
"textContent": "I imagine that `keys.sort_values(&mut values)` would be:\n\n\n keys.manual_sort_unstable(|keys, i, j| {\n mem::swap(&mut keys[i], &mut keys[j]);\n mem::swap(&mut values[i], &mut values[j]);\n });\n\n\nand then because the swap would be part of the std function instead of a custom closure, std can know that the slices won't change during sorting, so bounds checks can be skipped, like so:\n\n\n keys.manual_sort_unstable(|keys, i, j| unsafe {\n keys.swap_unchecked(i, j);\n values.swap_unchecked(i, j);\n });\n",
"title": "`<[T]>::sort_by_index` and `<[T]>::sort_by_key_and_index`"
}