如何知道所有切片元素是否相等,如果相等,则返回对第一个元素的引用?

Rod*_*igo 4 generics algorithm vector slice rust

给定任何切片,例如:

let words = &["one", "one", "one", "two"];
Run Code Online (Sandbox Code Playgroud)

如何知道所有元素是否相同?

更进一步,如果所有元素都相同,如何返回对第一个元素的引用?

本质上,我正在尝试编写一个如下函数:

fn are_all_elements_equal<T>(elems: &[T]) -> Option<&T> {
    // ... ?
}
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 7

我认为这是子切片模式的一个很好的用例:

pub fn are_all_elements_equal<T: PartialEq>(elems: &[T]) -> Option<&T> {
    match elems {
        [head, tail @ ..] => tail.iter().all(|x| x == head).then(|| head),
        [] => None,
    }
}
Run Code Online (Sandbox Code Playgroud)