Rust:split_at_mut是否相反(即join_mut)?

时间:2016-04-03 06:10:41

标签: split rust slice

这是一个非常好的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);
}

1 个答案:

答案 0 :(得分:4)

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

话虽如此,有点不安全,可以实现这个功能。

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