【发布时间】:2021-05-26 08:34:08
【问题描述】:
我想使用某种类似于闭包的格式对结构向量进行排序。这就是我的想法:
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]
这个函数是否有某种板条箱,或者如果它不存在我应该自己编写?
【问题讨论】:
-
doc.rust-lang.org/stable/std/vec/… - 这是你需要的吗?
-
您不能对通用迭代器进行排序,因为它们不允许随机访问。但是您可以使用
sort_by和朋友对向量或切片进行排序。
标签: sorting rust iterator closures