What is the more idiomatic way to sort a vector of strings by char?
Example:

Input:
["3r", "2n", "2s", "7r", "1s", "1s", "6r", "1s", "1n", "1n", "5n", "9n", "3r"]
Desired output:
["1n", "1n", "2n", "5n", "9n, "3r", "3r", "6r", "7r", "1s", "1s", "1s", "2s"]

首先,需要根据第二个字符对它们进行排序,以便将它们分组在一起,然后按第一个字符进行排序.

我用.filter.sort_by试了很多方法,但都不成功.

推荐答案

如果字符串的长度始终为两个字符,并且您总是希望首先按第二个字符对它们进行排序,则可以使用.sort_by作为比较器,该比较器会反转查看字符串:

let mut input = vec!("3r", "2n", "2s", "7r", "1s", "1s", "6r", "1s", "1n", "1n", "5n", "9n", "3r");
input.sort_by(|a, b| a.chars().rev().cmp(b.chars().rev()));
let expected = vec!("1n", "1n", "2n", "5n", "9n", "3r", "3r", "6r", "7r", "1s", "1s", "1s", "2s");
assert!(input == expected);

Rust相关问答推荐

如何将`Join_all``Vec<;Result<;Vec<;Foo&>;,Anywhere::Error&>;`合并到`Result<;Vec<;Foo&>;,Anywhere::Error&>;`

为什么Rust函数的移植速度比C++慢2倍?

为潜在的下游实现使用泛型绑定而不是没有泛型绑定的trait

为什么reqwest以文本形式下载二进制文件?

从Type::new()调用函数

在跨平台应用程序中使用std::OS::Linux和std::OS::Windows

将PathBuf转换为字符串

如何初始化选项<;T>;数组Rust 了?

为什么AsyncRead在Box上的实现有一个Unpin特征绑定?

Cargo.toml:如何有条件地启用依赖项功能?

.在 Rust 模块标识符中

如何返回 struct 体中向量的切片

为什么我的trait 对象类型不匹配?

Button.set_hexpand(false) 不会阻止按钮展开

decltype、dyn、impl traits,重构时如何声明函数的返回类型

如何刷新 TcpStream

改变不实现克隆的 dioxus UseState struct

编写 TOML 文件以反序列化为 struct 中的枚举

HashMap entry() 方法使borrow 的时间比预期的长

加入动态数量的期货