如何重置所有数组元素?

Mic*_*ing 5 arrays rust

经过广泛的谷歌搜索和研究来源后,这是我想出的最短的内容:

let mut buf = [0u8; 200];
for elem in buf.iter_mut() {
    *elem = 0;
}
Run Code Online (Sandbox Code Playgroud)

难道真的没有办法让它成为一句台词吗buf.set_all(0)

DK.*_*DK. 6

难道真的没有办法让它成为一句台词吗buf.set_all(0)

当然你可以把它变成单行...

for elem in buf.iter_mut() { *elem = 0; }
Run Code Online (Sandbox Code Playgroud)

好吧,好吧...如果你经常这样做,你可以定义一个提供set_all方法的扩展特征。

trait SetAll {
    type Elem;
    fn set_all(&mut self, value: Self::Elem);
}

impl<T> SetAll for [T] where T: Clone {
    type Elem = T;
    fn set_all(&mut self, value: T) {
        for e in self {
            *e = value.clone();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但就仅使用标准库中的内容而言,有for_each(正如 Sven Marnach 所指出的):

buf.iter_mut().for_each(|x| *x = 0)
Run Code Online (Sandbox Code Playgroud)

  • 截至今年早些时候,现在有 https://doc.rust-lang.org/std/primitive.slice.html#method.fill。 (2认同)