如何使用vec!宏初始化新Vector并自动用现有数组中的值填充它?
vec!
let a = [10, 20, 30, 40]; // a plain array let v = vec![??]; // TODO: declare your vector here with the macro for vectors
除了???字符,我还可以填充什么(语法方面)?
???
cgyqldqp1#
由于Vec<T>实现了From<[T; N]>,因此可以使用From::from()方法或Into::into()方法从数组创建它:
Vec<T>
From<[T; N]>
From::from()
Into::into()
let v = Vec::from(a); // Or let v: Vec<_> = a.into(); // Sometimes you can get rid of the type annoation if the compiler can infer it
vec![]宏不适用于此;它是用来从头开始创建Vec的,就像数组常量一样,你可以使用vec![]宏来代替创建一个数组并转换它:
vec![]
Vec
let v = vec![10, 20, 30, 40];
gg0vcinb2#
也可以使用to_vec方法:
to_vec
let a = [10, 20, 30, 40]; // a plain array let v = a.to_vec();
Playground根据注解,注意它克隆了元素,所以向量项应该实现Clone。
Clone
nhhxz33t3#
我是新手。我认为这个问题来自rustlings / exercises / vecs,它有助于理解rust的基本语法。
fn array_and_vec() -> ([i32; 4], Vec<i32>) { let a = [10, 20, 30, 40]; // a plain array let v = // TODO: declare your vector here with the macro for vectors (a, v) }
当我试图解决这个问题时,我搜索了是否有一种方法可以枚举现有数组中的所有元素,并使用 vec! 宏来构造向量。使用 Vec::from 很容易。但是,它不是宏而是函数。或者练习没有意义?
3条答案
按热度按时间cgyqldqp1#
由于
Vec<T>
实现了From<[T; N]>
,因此可以使用From::from()
方法或Into::into()
方法从数组创建它:vec![]
宏不适用于此;它是用来从头开始创建Vec
的,就像数组常量一样,你可以使用vec![]
宏来代替创建一个数组并转换它:gg0vcinb2#
也可以使用
to_vec
方法:Playground
根据注解,注意它克隆了元素,所以向量项应该实现
Clone
。nhhxz33t3#
我是新手。
我认为这个问题来自rustlings / exercises / vecs,它有助于理解rust的基本语法。
当我试图解决这个问题时,我搜索了是否有一种方法可以枚举现有数组中的所有元素,并使用 vec! 宏来构造向量。使用 Vec::from 很容易。但是,它不是宏而是函数。或者练习没有意义?