在 Python 中,我了解到我可以通过动态索引检索元组值:
data = (1,2,3,4)
data[0]
for a in range(len(data)):
print(data[a])
输出:
1
2
3
4
如何在 Rust 中执行此操作?
我试过这样的:
fn main() {
let data = (12, 3, 4, 5);
for a in 0..100 {
println!("{}", data.a);
}
}
但它不起作用,它只会给我一些错误。
最佳答案
正如其他人所指出的,您可能想要使用数组或 Vec<T>
相反。
作为the book explains ,元组是异构数据类型:每个元组元素可以有不同的类型。如果您可以遍历所有元组值,可能会发生奇怪的事情:
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);
}
另一方面,数组是同类类型:所有元素都具有相同的类型!所以上面代码片段中的问题不会发生。 Vec<T>
也是如此: 只有 T
类型的元素可以存储。 Vec<T>
之间的区别和数组:向量可以增长,即动态调整大小,而数组在编译时具有固定大小。
这是带有数组 ( Playground ) 的代码片段:
let data = [12, 3, 4, 5];
for a in 0..data.len() {
println!("{}", data[a]);
}
当然,如果需要,您可以像数组一样遍历集合而不遍历索引(例如 for elem in &data
)。
最后一点:当然,通过 unsafe
创建动态元组索引在技术上是可行的指针魔法——假设你只在你的元组中存储相同的类型。但这几乎没有必要,应该避免。这就是为什么我什至不会展示代码如何做到这一点。
关于rust - 如何创建动态索引来获取元组的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55520818/