如何对可选值数组进行排序?

Rom*_*kyi 1 sorting rust

我有一个可选值数组

struct Foo;

let array: [Option<Foo>; 5] = [
    Some(Foo {}), 
    Some(Foo {}), 
    None, 
    Some(Foo {}), 
    None
]; 
Run Code Online (Sandbox Code Playgroud)

如何对数组进行排序以将所有None值“冒泡”到顶部(左/升序)?

预期的结果应该是这样的

println!("{:?}", array) // [None, None, Some(Foo {}), Some(Foo {}), Some(Foo {})]
Run Code Online (Sandbox Code Playgroud)

Cha*_*man 8

None被比较为小于Some,因此假设Foo实现Ord,您只需要调用sort_unstable()(或sort()进行稳定排序)。

如果您只想对 s 进行冒泡None(而不是比较 s 的值Some),则可以使用sort[_unstable]_by_key(|v| v.is_some())。由于与false之前比较true,这会将Nones 放在第一位。