Как отсортировать вектор, содержащий структуры?

#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 внимание, что он также будет работать, его преимущество в том, что он стабилен, но работает медленнее, если только ваши данные не состоят в основном из отсортированных запусков.