【发布时间】:2017-10-31 19:25:50
【问题描述】:
您可以使用 contains 搜索模式,但 Vec::contains 用于单个元素。
我能够做到这一点的唯一方法是直接实现某种子字符串函数,但我有点希望有一个内置的方法。
let vec1 = vec![1, 2, 3, 4, 5];
let vec2 = vec![2, 3]; // vec2 IS a substring of vec1
let vec3 = vec![1, 5]; // vec3 is NOT a substring of vec3
fn is_subvec(mainvec: &Vec<i32>, subvec: &Vec<i32>) -> bool {
if subvec.len() == 0 { return true; }
if mainvec.len() == 0 { return false; }
'outer: for i in 0..mainvec.len() {
for j in 0..subvec.len() {
if mainvec[i+j] != subvec[j] {
continue 'outer;
}
}
return true;
}
return false;
}
println!("should be true: {}", is_subvec(&vec1, &vec2));
println!("should be false: {}", is_subvec(&vec1, &vec3));
我见过How can I find a subsequence in a &[u8] slice?,但那是专门针对u8 的,我想要一些适用于Vec 中的类型的东西。
【问题讨论】: