如何按字母顺序对字符串向量进行排序?

时间:2019-04-22 03:14:40

标签: rust

我想按字母顺序排列字符串向量

fn main() {
    let mut vec = Vec::new();
    vec.push("richard");
    vec.push("charles");
    vec.push("Peter");
    println!("{:?}", vec);
}

我尝试了println!("{:?}", vec.sort());println!("{}", vec.sort_by(|a,b| b.cmp(a)));,两个响应都是()

我希望得到以下结果

["charles", "Peter", "richard"]

1 个答案:

答案 0 :(得分:4)

sort函数在切片(以及Vec,因为它们可以Deref切片)上定义为pub fn sort(&mut self),即在原位执行排序,更改现有数据。因此,要实现您要执行的操作,可以尝试以下操作:

fn main() {
    let mut vec = Vec::new();
    vec.push("richard");
    vec.push("charles");
    vec.push("Peter");
    vec.sort();
    println!("{:?}", vec);
}

不幸的是,这不是您想要的东西,因为此will sort "Peter" before "charles"-字符串的默认比较器区分大小写(实际上,它与区域设置无关,因为它compares basing on Unicode code points) 。因此,如果要执行不区分大小写的排序,请here's the modification

fn main() {
    let mut vec = Vec::new();
    vec.push("richard");
    vec.push("charles");
    vec.push("Peter");
    vec.sort_by(|a, b| a.to_lowercase().cmp(&b.to_lowercase()));
    println!("{:?}", vec);
}