sorting - 如何使用类似地图的闭包对 Rust 向量进行排序?
问题描述
我想使用某种类似闭包的格式对结构向量进行排序。这就是我的想法:
struct PointTracker {
positive: u32,
negative: u32,
}
// ....
fn main() {
let item: Vec<PointTracker> // ....
// e.g: [{positive: 3, negative: 4}, {positive: 5, negative: 0}, {positive: 2, negative: 10}]
let sorted_item = item
.iter()
.sort_with(|x: PointTracker| x.positive - x.negative)
.collect::<PointTracker>();
// sorted from greatest to least:
// [{positive: 5, negative: 0}, {positive: 3, negative: 4}, {positive:2, negative: 10}]
}
我正在寻找的是某种函数,就像上面一样,它根据闭包中返回的值对项目进行排序。这取正值,从中减去负值,然后返回结果。第一个未排序项目的总和将是:[-1, 5, -8]
排序后的总和将是(如预期的那样):[5, -1, -8]
这个函数是否有某种板条箱,或者如果它不存在我应该自己编写?
解决方案
您正在搜索的功能是sort_by_key
:
#[derive(Debug)]
struct PointTracker {
positive: u32,
negative: u32,
}
fn main() {
let mut item = vec![
PointTracker {
positive: 3,
negative: 4,
},
PointTracker {
positive: 5,
negative: 0,
},
PointTracker {
positive: 2,
negative: 10,
},
];
item.sort_by_key(|x| x.positive as i32 - x.negative as i32);
println!("{:#?}", item);
}
输出:
[
PointTracker {
positive: 2,
negative: 10,
},
PointTracker {
positive: 3,
negative: 4,
},
PointTracker {
positive: 5,
negative: 0,
},
]
推荐阅读
- ruby-on-rails - Phusion 乘客安全检查更新保持连接
- java - 递归问题 - 意外输出
- ios - 使用swift在字典索引内合并零
- angular - 用于轮询的 Rxjs 导致多次重复的 api 调用
- asp.net - Unity 崩溃 Web API,没有日志
- c++ - 在 pimpl 中隐藏成员数据结构的 C++ 库
- android - 安卓改造2 | 从 JSON 响应中获取列表数据
- variables - 如何使用 ansible 找到用户 ID 并在 jinja2 模板中使用它?
- r - 注释回归线方程和 R^2 值
- google-cloud-run - 如何将两个 Cloud Run 应用程序放在一个域下以避免 CORS