gpt4 book ai didi

split - Rust:有没有 split_at_mut 的对立面(即 join_mut)?

转载 作者:行者123 更新时间:2023-11-29 08:11:38 25 4
gpt4 key购买 nike

有一个非常好的 split_at_mut 函数,它可以将 1 个切片分成 2 个...有没有办法撤消该操作,以便我可以再次返回到我的原始数组——假设我知道它们在内存中是连续的(因为我只是拆分它们)

问题是:有没有类似join_mut的东西,像这样:

fn main() {
let mut item : [u8;32] = [0u8;32];
let (mut first, mut second) = item[..].split_at_mut(16);
first[0] = 4;
second[0] = 8;
let mut x = first.join_mut(first, second); // <-- compile error
assert_eq(x[16], 8);
}

最佳答案

标准库中没有这样的函数,可能是因为它是一个相当小众的情况,通常可以使用第一种情况下拆分的切片来解决。

话虽这么说,但只要有一点不安全,就可以实现该功能。

fn join_mut<'a, T>(first: &'a mut [T], second: &'a mut [T]) -> Option<&'a mut [T]> {
let fl = first.len();
if first[fl..].as_mut_ptr() == second.as_mut_ptr() {
unsafe {
Some(::std::slice::from_raw_parts_mut(first.as_mut_ptr(), fl + second.len()))
}
}
else {
None
}
}

Playground

关于split - Rust:有没有 split_at_mut 的对立面(即 join_mut)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36382190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com