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

问题描述 投票:-1回答:1

这个问题在这里已有答案:

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

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"]
rust
1个回答
4
投票

sort函数在切片(和Vecs,因为它们可以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);
}
© www.soinside.com 2019 - 2024. All rights reserved.