gpt4 book ai didi

rust - 操作二维字符串向量时的最佳实践是什么?

转载 作者:行者123 更新时间:2023-11-29 08:35:35 26 4
gpt4 key购买 nike

我需要存储一个由随机大小的字符串组成的二维网格。我正在努力操纵向量。这是我所做的:

let mut grid: Vec<&mut Vec<String>> = Vec::new();
let mut v0: Vec<String> = Vec::new();
let mut v1: Vec<String> = Vec::new();

v0.push("first string into v0".to_string());
v1.push("first string into v1".to_string());

grid.push(&mut v0); // in position 0
grid.push(&mut v1);

println!("{:?}", &grid);

它返回(如预期):

[["first string into v0"], ["first string into v1"]]

稍后,我想向 v0 添加一个字符串:

let t1 = grid.get_mut(0);
let t2 = t1.unwrap();
t2.push("A new string into v0".to_string());

println!("{:?}", &grid);

然后输出是:

[["first string into v0", "A new string into v0"], ["first string into v1"]]

所以,它有效,但它是使用 2D 向量时的最佳解决方案吗?

最佳答案

你做的一切几乎都是正确的。想到的第一个问题是为什么要使用 Vec<&mut Vec<String>> .在那种情况下,vecs v0 和 v1 必须比网格长寿,这不一定是个好主意。我建议 Vec<Vec<String>> .

Joel Berkeley 在他的回答中建议您可以展平 Vector,但他没有解释您为什么要在网格中这样做。原因是 rust 2D 向量将始终指向其他向量,使 CPU 需要两次间接访问才能获取真实数据,这对缓存局部性不利,这取决于你在做什么,你可能会关心或不关心。如果您正在编写真正高性能的代码,您会想要这样做,但也取决于您正在设计的应用程序类型,您不应该 pre-optimize your code beforehand .

我还建议使用 vec! 如果可能的话,用宏来定义你的向量。

关于rust - 操作二维字符串向量时的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55984907/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com