example
struct MyStruct{
row: u8,
column: u8
}
let my_vector = a Vec<MyStruct> with like 100 items in it
假设我有一个简单的设置,比如说,我想对my_vector
列表中的100个项目按行排序,然后按列排序,这样我得到的向量看起来像sample 1
而不是sample 2
。sample 1
my_vector = vec![
MyStruct { row: 10, column: 1 },
MyStruct { row: 10, column: 2 },
MyStruct { row: 10, column: 3 }, ]
sample 2
my_vector = vec![
MyStruct { row: 10, column: 3 },
MyStruct { row: 10, column: 1 },
MyStruct { row: 10, column: 2 }, ]
目前我正在编写this post,它描述了如何使用sort_by_key()
函数按单个键排序,但我遇到的问题是我只能按单个键排序,而不能按两个或多个键排序。这导致了像sample 2
这样的问题,我对行进行了排序,但对列的排序是随机的。
我希望行和列都是有序的。如何做到这一点?,谢谢
5条答案
按热度按时间vh0rcniy1#
由于Rust中的元组实现了
PartialOrd
和字典序比较,因此可以使用sort_by_key()
方法:Playground。
wj8zmpe12#
您还可以为MyStruct实现PartialOrd或Ord< module std::CMP >
playground
huwehgph3#
通过整理前两个解决方案的信息,并在GitHub Copilot的帮助下,这里有一个
sort by two keys
排序方法的工作解决方案:在可变向量的
sort_by
方法上使用compare
参数:并使用:
将输出:
iklwldmw4#
你可以使用sort_by()
通过a和B,u可以设置条件,以便为排序link返回true
5w9g7ksd5#
我认为使用
match
是一个更好的选择,因为它只比较每一对一次。使用sort_unstable_by
可能会更好一些,因为unstable更快,而且可以使任何比较反向进行(降序)--只需为cmp()
调用交换a
和b
。