#rust #vec
Вопрос:
Допустим, у меня есть такой код, как:
struct GenericStruct {
a: u8,
b: String,
}
fn sort_array(generic_vector: Vec<GenericStruct>) -> Vec<GenericStruct> {
// Some code here to sort a vector.
todo!();
}
fn main() {
let some_words = String::from("Hello Word");
let x = GenericStruct { a: 25, b: some_words };
let some_vector: Vec<GenericStruct> = vec![x];
}
Как я могу сортировать векторы на основе одной его части, например, сортируя по «a» или сортируя по длине «b»?
Ответ №1:
Две возможности.
Либо реализуйте Ord
свойство для своей структуры, либо используйте sort_unstable_by_key
метод.
Вы бы использовали первое, если бы для вас generic_struct
существовал очевидный и единственный способ их сортировки , который имеет смысл не только в вашем текущем случае использования сортировки, но и в целом.
Вы бы использовали последнее, если бы эта схема сортировки была скорее «одноразовой».
somevector.sort_unstable_by_key(|element| element.a)
Комментарии:
1. обратите
sort_by_key
внимание, что он также будет работать, его преимущество в том, что он стабилен, но работает медленнее, если только ваши данные не состоят в основном из отсортированных запусков.