Sorting 如何使用类似地图的闭包对生锈向量进行排序?
我想对结构向量进行排序,使用某种类似闭包的格式。我是这么想的:Sorting 如何使用类似地图的闭包对生锈向量进行排序?,sorting,rust,iterator,closures,Sorting,Rust,Iterator,Closures,我想对结构向量进行排序,使用某种类似闭包的格式。我是这么想的: struct PointTracker{ 阳性:u32, 负片:u32,, } // .... fn main(){ 出租项目:Vec/。。。。 //例如:[{正:3,负:4},{正:5,负:0},{正:2,负:10}] 让已排序的项目=项目 .国际热核实验堆(iter) .使用(| x:PointTracker | x.positive-x.negative)对_进行排序 收集::(); //从最大到最小排序: //[{正:5,负
struct PointTracker{
阳性:u32,
负片:u32,,
}
// ....
fn main(){
出租项目:Vec/。。。。
//例如:[{正:3,负:4},{正:5,负:0},{正:2,负:10}]
让已排序的项目=项目
.国际热核实验堆(iter)
.使用(| x:PointTracker | x.positive-x.negative)对_进行排序
收集::();
//从最大到最小排序:
//[{正:5,负:0},{正:3,负:4},{正:2,负:10}]
}
我想要的是某种函数,如上面所述,它根据闭包中返回的值对项目进行排序。它取正值,减去负值,然后返回结果。第一个未排序项目的总和为:[-1,5,-8]
,排序项目的总和为(如预期的那样):[5,-1,-8]
此函数是否有某种板条箱,或者如果不存在,我是否应该编写自己的板条箱?您正在搜索的函数是
sort\u by\u key
:
#[派生(调试)]
结构点跟踪器{
阳性:u32,
负片:u32,,
}
fn main(){
让mut item=vec[
点跟踪器{
正面:3,,
否:4,,
},
点跟踪器{
肯定:5,
负数:0,,
},
点跟踪器{
正面:2,,
负数:10,,
},
];
项。按键排序(| x | x.正为i32-x.负为i32);
println!(“{:#?}”,项目);
}
输出:
[
点跟踪器{
正面:2,,
负数:10,,
},
点跟踪器{
正面:3,,
否:4,,
},
点跟踪器{
肯定:5,
负数:0,,
},
]
您正在搜索的功能是按键排序
:
#[派生(调试)]
结构点跟踪器{
阳性:u32,
负片:u32,,
}
fn main(){
让mut item=vec[
点跟踪器{
正面:3,,
否:4,,
},
点跟踪器{
肯定:5,
负数:0,,
},
点跟踪器{
正面:2,,
负数:10,,
},
];
项。按键排序(| x | x.正为i32-x.负为i32);
println!(“{:#?}”,项目);
}
输出:
[
点跟踪器{
正面:2,,
负数:10,,
},
点跟踪器{
正面:3,,
否:4,,
},
点跟踪器{
肯定:5,
负数:0,,
},
]
-这就是您需要的吗?您不能对泛型迭代器进行排序,因为它们不允许随机访问。但是你可以和朋友一起对向量或切片进行排序这就是您需要的吗?您不能对泛型迭代器进行排序,因为它们不允许随机访问。但是你可以和你的朋友一起对向量或切片进行排序。除此之外,sort\u by\u key
和and之间的差异可能值得一提,或者像Itertools
这样的板条箱按照作者的想法进行排序,请参见:和。对此竖起大拇指,Jason,非常感谢Rabbid76。出于某种原因,sort_by_key
没有给我所需的结果,所以我转而使用itertools
,我得到了我想要的实现。除此之外,sort_by_key
之间的差异可能值得一提,或者像itertools
这样的板条箱按照作者的想法进行,看:还有。杰森,我竖起大拇指,非常感谢拉比76。出于某种原因,sort\u by\u key
没有给我所需的结果,所以我转而使用itertools
,得到了我想要的实现。