在 Python 中,我了解到可以通过动态索引检索元组值:
data = (1,2,3,4)
data[0]
for a in range(len(data)):
print(data[a])
Run Code Online (Sandbox Code Playgroud)
输出:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
如何在 Rust 中做到这一点?
我试过这样的事情:
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但它不起作用,它只会给我一些错误。
正如其他人指出的那样,您可能想要使用数组或Vec<T>代替。
正如书中所解释的,元组是异构数据类型:每个元组元素可以有不同的类型。如果您可以遍历所有元组值,可能会发生奇怪的事情:
let data = (12, true);
for a in 0..data.len() {
// Oops: `+ 1` makes sense for the integer, but not for the bool
println!("{}", data.a + 1);
}
Run Code Online (Sandbox Code Playgroud)
另一方面,数组是同构类型:所有元素都具有相同的类型!所以上面的代码片段中的问题不会发生。这同样适用于Vec<T>:只能T存储类型元素。Vec<T>和数组的区别:向量可以增长,即动态调整大小,而数组在编译时具有固定大小。
这是带有数组(Playground)的代码片段:
let data = [12, 3, 4, 5];
for a in 0..data.len() {
println!("{}", data[a]);
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,如果您愿意(例如for elem in &data),您可以迭代数组之类的集合而不迭代索引。
最后一点:当然,技术上可以通过执行unsafe指针魔术来创建动态元组索引- 假设您只在元组中存储相同的类型。但这几乎没有必要,应该避免。这就是为什么我什至不会展示代码如何做到这一点。
| 归档时间: |
|
| 查看次数: |
1287 次 |
| 最近记录: |