如何在Rust中对字符串的字符进行排序?

时间:2017-03-11 00:21:10

标签: string sorting rust

我有字符串“laxmi”,我需要按字母顺序降序排序,生成“xmlia”。我写了这个:

fn main() {
    let wordy: String = "I am a hello world example";

    let chars: Vec<char> = wordy.chars().vector();
    chars.sort_by(|a, b| b.cmp(a));

    // let s: String = chars.into_iter().collect();
    println!("test{:?}", chars);
    let s = String::from_iter(chars);
    println!("{}", s);
}

仅当wordy&str时才有效,但我有String。如何将String转换为char的向量,以便我可以对字符串进行排序?

2 个答案:

答案 0 :(得分:2)

我这样做了并获得了所需的输出。然而,这可能不是最佳方式。

use std::iter::Iterator;
use std::iter::FromIterator;

fn main() {
    let wordy: String = "I am a hello world example".to_owned();
    let s_slice: &str = &wordy[..];

    let mut chars: Vec<char> = s_slice.chars().collect();
    chars.sort_by(|a, b| b.cmp(a));

    println!("test{:?}", chars);
    let s = String::from_iter(chars);
    println!("{}", s);
}

答案 1 :(得分:1)

如果您可以使用板条箱,则可以使用itertools条板箱来简化很多事情。

将箱子添加到您的Cargo.toml

[dependencies]
itertools = "0.9.0"

然后在文件中使用它来对字符串进行排序和反转。

use itertools::Itertools;

fn main() {
    let wordy = "I am a hello world example";

    let s = wordy.chars().sorted().rev().collect::<String>();

    println!("{}", s);
}