gpt4 book ai didi

sorting - 如何对带有 map 状闭包的Rust Vector进行排序?

转载 作者:行者123 更新时间:2023-12-03 11:42:17 26 4
gpt4 key购买 nike

我想使用某种类似于闭包的格式对结构的Vector进行排序。这就是我的想法:

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,
},
]

关于sorting - 如何对带有 map 状闭包的Rust Vector进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66343851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com