Rust 数组

数组是相同类型元素的列表。例如,如果我们想存储前五个自然数,我们可以创建一个数组,而不是创建五个不同的变量。

在 Rust 中,我们使用方括号 [] 来创建数组。

// array of natural numbers
let arr = [1, 2, 3, 4, 5];

这里,我们创建了一个名为 arr 的数组,它包含五个数字。


在 Rust 中创建数组

在 Rust 中,我们可以通过三种不同的方式创建数组:

  1. 带数据类型的数组
  2. 不带数据类型的数组
  3. 带默认值的数组

让我们详细了解每种数组创建方法。


Rust 中带数据类型的数组

fn main() {
// initialization of array with data type let numbers: [i32; 5] = [1, 2, 3, 4, 5];
println!("Array of numbers = {:?}", numbers); }

输出

Array of numbers = [1, 2, 3, 4, 5]

在上面的示例中,我们使用表达式创建了一个数字数组:

let numbers: [i32; 5] = [1, 2, 3, 4, 5];

这里,

  • numbers - 数组的名称
  • [i32; 5] - i32 是数组元素的预定义数据类型,5 是数组的大小
  • [1, 2, 3, 4, 5] - 数组内的元素

Rust 中不带数据类型的数组

fn main() {
// initialization of array without data type let numbers = [1, 2, 3, 4, 5];
println!("array of numbers = {:?}", numbers); }

输出

Array of numbers = [1, 2, 3, 4, 5]

在上面的示例中,我们使用表达式创建了一个数字数组:

let numbers = [1, 2, 3, 4, 5];

这里,

  • numbers - 数组的名称
  • [1, 2, 3, 4, 5] - 数组内的元素

您可以看到我们没有定义数组的数据类型和大小。在这种情况下,Rust 编译器会根据数组元素自动识别数据类型和大小。


Rust 中带默认值的数组

fn main() {
// initialization of array with default values let numbers: [i32; 5] = [3; 5];
println!("Array of numbers = {:?}", numbers); }

输出

Array of numbers = [3, 3, 3, 3, 3]

在上面的示例中,我们使用表达式创建了一个数字数组:

let numbers: [i32; 5] = [3; 5];

这里,

  • numbers - 数组的名称
  • [i32; 5] - 表示数组的数据类型(i32)和大小(5
  • [3; 5] - 是一个**重复表达式**,其中值 3 将填充数组 5

注意: 在创建默认值数组时,我们也可以省略数据类型和大小。例如,

fn main() {
    // initialize array with default values
    let numbers = [3; 5];

    println!("Array of numbers = {:?}", numbers);
}

输出

Array of numbers = [3, 3, 3, 3, 3]

复习:Rust 中创建数组的不同方法

让我们通过一个完整的示例了解如何在 Rust 中创建数组。

fn main() {
    // an array without data type
    let a = [5, 4, 3, 2, 1];
    
    // an array with data type and size
    let b: [i32; 5] = [1, 2, 3, 4, 5];
    
    // an array with default values
    let c = [3; 5];
    
    println!("a = {:?}", a);
    println!("b = {:?}", b);
    println!("c = {:?}", c);
}

输出

a = [5, 4, 3, 2, 1]
b = [1, 2, 3, 4, 5]
c = [3, 3, 3, 3, 3]

注意:我们在 println! 函数中使用 :? 来打印整个数组。


访问 Rust 数组的元素

数组中的每个元素都与一个唯一的数字序列相关联。这个数字称为**数组索引**。

假设我们有一个颜色数组:

let colors = ["red", "green", "blue"];

数组索引如下所示:

Array index Visualization in Rust
Rust 中数组索引的可视化

在 Rust 中,我们可以使用相应的数组索引来访问单个数组元素。例如:

  • colors[0] - 访问**索引 0**(第一个元素)处的元素
  • colors[1] - 访问**索引 1**(第二个元素)处的元素
  • colors[2] - 访问**索引 2**(第三个元素)处的元素

注意:数组索引始终从 0 开始;因此,数组的第一个元素位于位置 0,而不是 1。


示例:访问数组元素

fn main() {
    let colors = ["red", "green", "blue"];
    
    // accessing element at index 0
    println!("1st Color: {}", colors[0]);

    // accessing element at index 1
    println!("2nd Color: {}", colors[1]);

    // accessing element at index 2
    println!("3rd Color: {}", colors[2]);
}

输出

1st Color: red
2nd Color: green
3rd Color: blue

Rust 中的可变数组

在 Rust 中,数组是不可变的,这意味着一旦创建,我们就无法更改其元素。

但是,我们可以通过在变量名前使用 mut 关键字来创建可变数组。例如:

// create a mutable array in rust
let mut numbers: [i32; 5] = [1, 2, 3, 4, 5];

现在,我们可以对此数组进行更改。

让我们看一个例子:

fn main() {
    let mut numbers: [i32; 5] = [1, 2, 3, 4, 5];
    
    println!("original array = {:?}", array);
    
    // change the value of the 3rd element in the array
    numbers[2] = 0;
    
    println!("changed array = {:?}", numbers);
}

输出

original array = [1, 2, 3, 4, 5]
changed array = [1, 2, 0, 4, 5]

在这里,我们将数组的第三个元素的新值赋为 0

numbers[2] = 0;

我们将索引为 2(第三个元素)的元素从 3 更改为 0。这是可能的,因为我们将 numbers 数组创建为可变的。

注意:数组内的值只能修改,不能删除,因为数组的大小在初始化后是固定的。


遍历 Rust 数组

在 Rust 中,我们可以使用 for..in 循环来遍历数组。例如:

fn main() {
    let colors = ["red", "green", "blue"];
    
    // loop through an array to print its index and value
    for index in 0..3 {
        println!("Index: {} -- Value: {}", index, colors[index]);
    }
}

输出

Index: 0 -- Value: red
Index: 1 -- Value: green
Index: 2 -- Value: blue

在上面的示例中,我们使用了带范围 0..3for...in 循环。

for index in 0...3 {
    ...
}

这里,循环将执行 **3** 次(从 **0** 到 **2**)。在循环的每次迭代中,index 的值将是 **0**、**1** 和 **2**。

我们使用该索引来访问数组的元素。


常见问题

我们可以在 Rust 中创建动态数组吗?

在动态数组中,没有确切的大小,我们可以向数组添加任意数量的元素。

但是,Rust 不允许我们创建动态数组,因为编译器需要一个已定义的大小来为数组分配空间。

数组有哪些特性?

Rust 中数组的一些特性如下:

  • 数组只能包含相同数据类型的元素。
  • 在使用数组之前必须定义其大小,并且初始化后不能更改。
  • 数组元素存储在堆栈的连续内存块中。
  • 数组的每个元素都与一个称为数组索引的唯一数字相关联,我们使用数组索引来访问数组中的相关元素。
我们如何找到 Rust 数组的长度?

我们可以使用 len 方法来查找 Rust 数组的长度。例如:

fn main() {
    let array = [1, 2, 3, 4, 5];

    println!("Array Length: {}", array.len());
}

// Output: Array Length: 5

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战