Rust中数组和元组的比较

Rust复合数据类型有两种:元组和数组。让我们揭开这些数据结构之间的关键属性和差异。

什么是元组
Rust 中的元组允许存储异构数据类型,存储不同类型的数据。以下是一些关键属性:

  • 固定长度:元组保持固定长度,确保结构完整性。
  • 多样化的数据类型:它们拥抱多样性,容纳不同数据类型的元素。

let tup: (i32, f64, u8) = (500, 6.4, 1);

  • 访问元素:使用点运算符访问元素。与索引一起。

let tup: (i32, i32, i32) = (1, 2, 3);
let first = tup.0; // 1
let second = tup.1;
// 2
let third = tup.2;
// 3

  • 解构魔法:可以解构元组以揭示各个元素。

let tup = (1, 2, 3);
let (x, y, z) = tup;
println!("The value of x is {x}, the value of y is {y}, the value of z is {z}");
// The value of x is 1, the value of y is 2, the value of z is 3

注意:没有任何值的空元组有一个特殊的名称:unit (),表示空值或空返回类型。

什么是数组
Rust 中的数组为相同数据类型提供了基于堆栈的避风港。下面我们就来看看他们的特点:

  • 固定长度:数组支持固定长度,非常适合具有预定元素数量的场景。
  • 同质存储:它们存储相似的数据类型,确保一致性。

let a = [1, 2, 3, 4, 5];
let first = a[0]; // 1
let second = a[1];
// 2

  • 解构数组:与元组类似,可以解构数组以提取单个元素。

let a = [1, 2];
let [first, second] = a;
println!("The value of first is {first}, the value of second is {second}");
// The value of first is 1, the value of second is 2


差异:

  1. 数组是同质的;元组是异构的。
  2. 元组存储在堆heap内存中;数组存储在栈stack内存中。
  3. 数组的元素存储在连续的内存位置中。
  4. 元组使用括号 () 初始化,而数组使用方括号 [] 初始化。

相似之处:

  1. 两者都有固定的长度。
  2. 两者都支持解构。
  3. 两者都用于存储多个值。
  4. 两者都存储在堆栈内存中。
  5. 可以使用索引访问各个元素。