Unc*_*ame 5 replace slice rust
我有一个字节向量,并希望每更换[1, 2, 3]
用[4, 5, 6]
。在Rust中这怎么可能?
let mut buf = vec![1, 2, 3, 7, 8];
// ?
assert_eq!(buf, vec![4, 5, 6, 7, 8]);
Run Code Online (Sandbox Code Playgroud)
这个函数可以完成以下工作:
fn replace_slice<T>(source: &mut [T], from: &[T], to: &[T])
where
T: Clone + PartialEq,
{
let iteration = if source.starts_with(from) {
source[..from.len()].clone_from_slice(to);
from.len()
} else {
1
};
if source.len() > from.len() {
replace_slice(&mut source[iteration..], from, to);
}
}
Run Code Online (Sandbox Code Playgroud)
该函数是递归的,但您也可以使用循环重写它。
示例1:
fn main() {
let mut buf = vec![1, 2, 3, 7, 8, 1, 2, 3];
replace_slice(&mut buf[..], &[1, 2, 3], &[4, 5, 6]);
assert_eq!(buf, vec![4, 5, 6, 7, 8, 4, 5, 6]);
}
Run Code Online (Sandbox Code Playgroud)
示例2:( 来自trentcl的评论)
fn main() {
let mut buf = vec![1, 2, 3, 3, 4, 1, 2, 3];
replace_slice(&mut buf[..], &[1, 2, 3], &[5, 1, 2]);
assert_eq!(buf, vec![5, 1, 2, 3, 4, 5, 1, 2]);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
351 次 |
最近记录: |