【问题标题】:How do I sort a vector of Strings alphabetically? [duplicate]如何按字母顺序对字符串向量进行排序? [复制]
【发布时间】:2026-02-16 09:50:02
【问题描述】:

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

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"]

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 嗨,我试过println!("{:?}", vec.sort());println!("{}", vec.sort_by(|a,b| b.cmp(a)));,两个回复都是()
  • response()是因为sort方法修改了vector本身。
  • 感谢您的回答 @SvetlinZarev ,我是 Rust 的新手,这个问题可能很愚蠢。

标签: rust


【解决方案1】:

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);
}

【讨论】:

  • 进行排序的行可以更简洁地替换为vec.sort_by_key(|name| name.to_lowercase());
最近更新 更多