rust - 如何创建动态索引来获取元组的值?

标签 rust tuples

在 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/

相关文章:

python - 将元组列表映射到字典中

windows - python “TypeError: getsockaddrarg: AF_INET address must be tuple, not int”中的socket()函数元组错误

Python - 有效地将数据从元组列表提取到另一个列表

c++ - 将函数应用于元组的每个元素

rust - 在使用Serde进行序列化时,是否有一种方法可以将结构的字段分组,例如 “flatten”属性的逆函数?

rust - 如何在泛型/嵌套结构中省略顶级类型参数?

module - 使用标准库中的模块可以在我的 crate root 中使用,但不能在模块中使用

rust - 我的类似RefCell的结构上的rowe_mut()不起作用

rust - 如何在 Diesel 中针对 Postgres 数据库执行带有子查询的删除?

list - F# 取一个列表,返回元组列表