在Rust中初始化字符串数组

时间:2017-05-25 17:42:46

标签: arrays rust

我想创建一个固定大小的可变数组。元素在程序中稍后初始化。如何初始化数组?

我试过这样做:

let mut array: [String; 126] = [String::new(); 126];

它给了我错误:

the trait bound 'std::string::String: std::marker::Copy' is not satisfied
the trait 'std::marker::Copy' is not implemented for 'std::string::String'

如何使用新字符串初始化数组?

1 个答案:

答案 0 :(得分:6)

目前,使用大型固定大小的阵列几乎没有任何好处。它们没有实现与其他序列类型一样多的特征。

特别是,Default在这里很有用,但它只适用于最多32的数组:

let array: [String; 32] = Default::default();

除此之外的任何数字都将无法编译,因为目前,Rust在数组大小方面不是通用的,并且Default的这32个实现是手动添加的。

我们可以使用其他容器类型来克服这个问题,例如Vec:

let mut array: Vec<String> = vec![String::new(); 126];

但是,当然,根据您的使用案例,您可能还会考虑使用Iterator API进行懒惰并仅收集最终结果。