如何用零填充数组?

Mad*_*oop 11 rust rust-macros

fn main() {
    let arr: [u8;8] = [97, 112, 112, 108, 101];
    println!("Len is {}",arr.len());
    println!("Elements are {:?}",arr);
}
Run Code Online (Sandbox Code Playgroud)
fn main() {
    let arr: [u8;8] = [97, 112, 112, 108, 101];
    println!("Len is {}",arr.len());
    println!("Elements are {:?}",arr);
}
Run Code Online (Sandbox Code Playgroud)

有什么办法可以用0来填充剩余的元素吗?就像是:

let arr: [u8;8] = [97, 112, 112, 108, 101].something();
Run Code Online (Sandbox Code Playgroud)

Max*_*nko 10

您可以使用concat_arrays宏来实现:

use concat_arrays::concat_arrays;

fn main() {
    let arr: [u8; 8] = concat_arrays!([97, 112, 112, 108, 101], [0; 3]);
    println!("{:?}", arr);
}
Run Code Online (Sandbox Code Playgroud)

我认为没有外部依赖是不可能的。


Aid*_*en4 10

除了其他答案之外,您还可以使用 const 泛型来编写专用方法。

fn pad_zeroes<const A: usize, const B: usize>(arr: [u8; A]) -> [u8; B] {
    assert!(B >= A); //just for a nicer error message, adding #[track_caller] to the function may also be desirable
    let mut b = [0; B];
    b[..A].copy_from_slice(&arr);
    b
}
Run Code Online (Sandbox Code Playgroud)

操场


Ryt*_*s I 5

您可以从零开始,然后设置初始值。但这是必须arrmut

fn main() {
    let mut arr: [u8;8] = [0;8];
    let init = [97, 112, 112, 108, 101];
    arr[..init.len()].copy_from_slice(&init);

    println!("Len is {}",arr.len());
    println!("Elements are {:?}",arr);
}
Run Code Online (Sandbox Code Playgroud)

链接到游乐场