如何用零填充数组?

Posted

技术标签:

【中文标题】如何用零填充数组?【英文标题】:How to pad an array with zeros? 【发布时间】:2021-11-25 09:42:57 【问题描述】:
fn main() 
    let arr: [u8;8] = [97, 112, 112, 108, 101];
    println!("Len is ",arr.len());
    println!("Elements are :?",arr);

error[E0308]: mismatched types
 --> src/main.rs:2:23
  |
2 |     let arr: [u8;8] = [97, 112, 112, 108, 101];
  |              ------   ^^^^^^^^^^^^^^^^^^^^^^^^ expected an array with a fixed size of 8 elements, found one with 5 elements
  |              |
  |              expected due to this

有没有办法用 0 填充剩余的元素?比如:

let arr: [u8;8] = [97, 112, 112, 108, 101].something();

【问题讨论】:

【参考方案1】:

除了其他答案,你可以使用 const generics 来写一个专门的方法。

fn pad_zeroes<const A: usize, const B: usize>(arr: [u8; A]) -> [u8; B] 
    assert!(B >= A);
    let mut b = [0; B];
    b[..A].copy_from_slice(&arr);
    b

Playground

【讨论】:

不错的简单解决方案。 谢谢伙计。对于像我这样的初学者来说,简单的解决方案很容易理解。【参考方案2】:

你可以使用concat_arrays 宏来实现它:

use concat_arrays::concat_arrays;

fn main() 
    let arr: [u8; 8] = concat_arrays!([97, 112, 112, 108, 101], [0; 3]);
    println!(":?", arr);

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

【讨论】:

【参考方案3】:

您可以从零开始,然后设置初始值。这要求 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);

链接到Playground

【讨论】:

以上是关于如何用零填充数组?的主要内容,如果未能解决你的问题,请参考以下文章

python如何用零填充numpy数组

如何用 0(零)填充整数? [复制]

如何用零填充 pandas groupby 列表的缺失日期?

Python列表,长度为7。如何用零和一填充数据

如何用空对象填充字符串数组?

如何用字符串填充数组?