在 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>
反而。
As 这本书解释了 https://doc.rust-lang.org/book/ch03-02-data-types.html#the-tuple-type,元组是异构数据类型:每个元组元素可以有不同的类型。如果您可以迭代所有元组值,则可能会发生奇怪的事情:
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>
和数组:向量可以增长,即动态调整大小,而数组在编译时具有固定大小。
这是带有数组的代码片段():
let data = [12, 3, 4, 5];
for a in 0..data.len() {
println!("{}", data[a]);
}
但是,当然,如果您愿意,您可以迭代数组等集合,而不迭代索引(例如for elem in &data
).
最后一点:当然,在技术上可以通过以下方式创建动态元组索引unsafe
指针魔术 - 假设您只在元组中存储相同的类型。但这几乎没有必要,应该避免。这就是为什么我什至不会展示代码如何做到这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)