rust 按习惯法查找切片索引(大海捞针)[重复]

w41d8nur  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(101)
    • 此问题在此处已有答案**:

How can I find a subsequence in a &[u8] slice?(4个答案)
7天前关闭。
javascript提供了"abcde".indexOf("de") === 3
我想对&[T]做同样的事情,其中T实现了PartialEq。

fn search_haystack<T: PartialEq>(needle: &[T], haystack: &[T]) -> Option<usize> {
    todo!()
}
fn main() {
    let haystack = [1,2,3,4,5];
    let needle = [3,4];
    assert_eq!(search_haystack(&needle, &haystack), Some(2))
}

我可以自己写这个函数,但是看起来像是stdlib提供的,我一直没能找到。我如何使用stdlib(不是每晚)有效地完成这个函数呢?

tzcvj98z

tzcvj98z1#

你可以使用slice` .windows( `n` )`来得到所有长度为n的子切片的迭代器,你可以将它与iterator.position()结合起来,找到第一个等于needle的子切片:

fn search_haystack<T: PartialEq>(needle: &[T], haystack: &[T]) -> Option<usize> {
    if needle.is_empty() {
        // special case: `haystack.windows(0)` will panic, so this case
        // needs to be handled separately in whatever way you feel is
        // appropriate
        return Some(0);
    }

    haystack.windows(needle.len()).position(|subslice| subslice == needle)
}

相关问题