这个问题在这里已有答案:
我想按字母顺序排序一个字符串向量
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"]
sort
函数在切片(和Vec
s,因为它们可以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);
}