为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
温温酱 2022-01-17 10:34:13
我想初始化一个二维数组,其中内部数组的每个成员都包含一个 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 中获得类似的结果,但我找不到任何文档来填充字符串并初始化 2D 数组。另请注意,我想为数组的每个成员生成字符串,而不是使用可用的字符串。PS:我也在 Rust 中寻找类似的东西
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

在 Rust 中,这取决于您要将这些值用于什么目的。我喜欢这个创建重复字符串的答案。“行”取决于您是否需要在 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宏将发送的值移动到其中。在. vec_ num_rows_ copies请注意,clone在大多数用例中这可能不是必需的,因为您通常不会borrows同时copies在同一范围内。


作为警告,我对生锈还很陌生,但相信这是一个不错的答案。我很高兴接受更正。


查看完整回答
反对 回复 2022-01-17
?
莫回无

TA贡献1865条经验 获得超7个赞

你可以使用切片。这可能不是最短的解决方案,但它对我有用。


package main


import (

    "fmt"

    "strings"

)


func main() {

    xs := strings.Repeat("x", 1000)


    num_rows := 5

    num_cols := 5


    data := make([][]string, num_rows)

    for y := 0; y < num_rows; y++ {

        data[y] = make([]string, num_cols)

        for x := 0; x < num_cols; x++ {

            data[y][x] = xs

        }

    }


    fmt.Printf("%T", data)

    fmt.Print(data)

}


查看完整回答
反对 回复 2022-01-17
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

一个非常简单的 rust 在线示例:


fn main() {

    let data: Vec<String> = (0..1000).map(|n| (0..n).map(|_| 'x').collect()).collect();

    println!("{:?}", data);

}


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 378 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号