Arrays 如何在Rust中映射数组引用

Arrays 如何在Rust中映射数组引用,arrays,rust,iterator,Arrays,Rust,Iterator,我有这个数组 let buffer: &[u8] = &[0; 40000]; 但当我想这样绘制地图时: *buffer.map( |x| 0xff); 我有以下错误: error[E0599]:在当前作用域中找不到类型`&[u8]`名为`map`的方法 -->src/bin/save_png.rs:12:13 | 12 |*buffer.map(| x | 0xff);/。地图(| x | 0xff); | ^^^ | =注意:方法“map”存在,

我有这个数组

let buffer: &[u8] = &[0; 40000];
但当我想这样绘制地图时:

*buffer.map( |x| 0xff);
我有以下错误:

error[E0599]:在当前作用域中找不到类型`&[u8]`名为`map`的方法
-->src/bin/save_png.rs:12:13
| 
12 |*buffer.map(| x | 0xff);/。地图(| x | 0xff);
|             ^^^
|
=注意:方法“map”存在,但不满足以下特征界限:
`&mut&[u8]:std::iter::迭代器`
`&mut[u8]:std::iter::迭代器`

我尝试了几种方法来实现元素的可变,但无法获得正确的语法。有人有经验吗?我正在尝试使用png图像缓冲区。

类型
&[T]
没有
映射方法。如果查看错误消息,它会告诉您名为
map
的方法存在,但它不适用于
&mut&[u8]
&mut[u8]
,因为这些类型不实现
迭代器。数组和其他集合通常有一个或一组方法来创建迭代器。对于切片或数组,您可以选择
iter()
(迭代引用)或
进入\u iter()
(迭代移动的值并使用源集合)

通常,您还需要将这些值收集到其他集合中:

let res: Vec<u8> = buffer
    .iter()
    .map(|x| 0xff)
    .collect();
let res:Vec=buffer
.国际热核实验堆(iter)
.map(| x | 0xff)
.收集();

您能否取回数组,而不是转换为
Vec
?@Ixx您无法取回数组,因为
.collect()
不知道输入的长度,并且数组的长度是固定的。通过查看迭代器的
实现,您可以查看所有可以收集到的内容: