Подтвердить что ты не робот

Как я могу совместно сортировать два Vecs на основе значений в одном из Vecs?

У меня есть два Vec, которые соответствуют списку векторов признаков и их соответствующих меток классов, и я хотел бы совместно сортировать их по меткам класса.

Однако, Rust sort_by работает на срезе, а не является общей функцией над признаком (или подобным), и закрытие получает только элементы, которые нужно сравнить, а не индексы, поэтому я могу скрытно взломать сортировку параллельны друг другу.

Я рассмотрел решение:

let mut both = data.iter().zip(labels.iter()).collect();
both.sort_by( blah blah );
// Now split them back into two vectors

Я бы предпочел не выделять целый новый вектор, чтобы делать это каждый раз, потому что размер данных может быть чрезвычайно большим.

Я всегда могу реализовать свой собственный вид, конечно, но если есть встроенный способ сделать это, было бы намного лучше.

4b9b3361

Ответ 1

Я просто написал ящик "перестановка" , который позволяет это сделать:)

let names = vec!["Bob", "Steve", "Jane"];
let salary = vec![10, 5, 15];
let permutation = permutation::sort(&salary[..]);
let ordered_names = permutation.apply_slice(&names[..]);
let ordered_salaries = permutation.apply_slice(&salary[..]);
assert!(ordered_names == vec!["Steve", "Bob", "Jane"]);
assert!(ordered_salaries == vec![5, 10, 15]);

Вероятно, это поддержит это в одном вызове функции в будущем.