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/

相关文章:

c - 最小和最大 C 故障

rust - 从结构 : cannot move out of borrowed content 中获取枚举字段

javascript - 嵌套 Promise 未推送到数组

javascript - 问答游戏: The answers from an array are not properly coming up as correct or incorrect.

docker - 调用 tcp 127.0.0.1 :8000: connect: connection refused golang docker containers

map - Go:什么决定了映射键的迭代顺序?

rust - 如何用 Rust 实现应用程序状态?

rust - 为什么可执行文件依赖于 glibc?

c++ - 重新分配时 vector 调用析构函数

go - 使用 go 的 HTTP PUT 请求处理程序