我想初始化一个二维数组,其中内部数组的每个成员都包含一个由 1000 个 x 组成的字符串。像这样的东西:
var data = [num_rows][num_cols]string("x....x(upto 1000)")
但是所有的谷歌搜索都是徒劳的。在 C++ 中,我可以实现类似的事情:
vector<vector<string>> data(num_rows, vector<string>(num_cols, string("x",1000)));
在 Ruby 中是这样的:
Array.new(num_rows) { Array.new(num_cols) { "x"*1000 } }
想在 go 中实现类似的结果,但我找不到任何文档来填充字符串和初始化二维数组。另请注意,我想为数组的每个成员生成字符串,而不是使用可用的字符串。
PS : 我也在寻找 Rust 中类似的东西
最佳答案
在 Rust 中,这取决于您要将这些值用于什么目的。我喜欢this answer用于创建重复的字符串。 “行”取决于您是否想要在 Rust 中明确表示的引用或复制语义。 borrows
向量是一串借用的字符串,它们引用回 x_s
拥有的内存。 copies
向量是原始 x_s
字符串的一堆内存副本。
use std::iter;
fn main() {
let num_rows = 1000;
let num_cols = 1000;
let x_s : String = iter::repeat('x').take(num_cols).collect();
// pick one of the below
let borrows : Vec<&str> = vec![&*x_s ; num_rows];
let copies : Vec<String> = vec![x_s.clone() ; num_rows];
}
在最后一行调用 clone
是因为 vec
宏移动了发送到其中的值。在 copies
的情况下,vec
宏还将克隆此克隆 num_rows
次。请注意,在大多数用例中,此 clone
可能不是必需的,因为您通常不会在同一范围内同时拥有 borrows
和 copies
.
作为一个警告,我对使用rust 还很陌生,但相信这是一个不错的答案。我很乐意接受更正。
关于arrays - 在 GoLang 和 Rust 中初始化字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590396/