arrays - 在 GoLang 和 Rust 中初始化字符串数组

标签 arrays go rust

我想初始化一个二维数组,其中内部数组的每个成员都包含一个由 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 可能不是必需的,因为您通常不会在同一范围内同时拥有 borrowscopies .

作为一个警告,我对使用rust 还很陌生,但相信这是一个不错的答案。我很乐意接受更正。

关于arrays - 在 GoLang 和 Rust 中初始化字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37590396/

相关文章:

javascript - Array.of 与 "[ ]"。何时使用 Array.of 超过 "[ ]"?

ios - 无法将 [String] 类型的值分配给 String 类型?带文字标签

generics - 如何消除特征对象边界中的关联类型的歧义?

rust - 在 Hyper 0.11 中找不到类型 `post` 的名为 `hyper::Client` 的方法

java - java foreach循环中的数组引用

c++ - 非pod结构查找表

go - HTTP批量从多个API获取并保存到结构

go - 如何将连接参数 db 传递给 main.go?

json - 请求正文日期解析问题

rust - 结构中的自定义 getter 和 setter