数组的基本操作
在 Rust 中, 数组的类型是 [T; N]
, 其中 T
是数组中存放的元素的数据类型, 而 N
表示数组的元素个数.
它们一旦被确定后就不能再更改. 另外, 在栈上存储的数组, 其占用的内存大小是在编译期间确定了的,
对栈上数组中的元素的访问效率极高.
访问元素
访问数组中的元素, 是通过该元素在数组中的索引值实现的, 该索引值是唯一的.
比如:
fn main() { let numbers: [i32; 6] = [1, 1, 2, 3, 5, 8]; assert_eq!(numbers[0], 1); assert_eq!(numbers[3], 3); assert_eq!(numbers[5], 8); }
交换数组中的两个元素
在进行数组排序时, 经常需要交换其中的元素, 其时间复杂度是 O(1)
:
fn main() { let mut numbers: [i32; 6] = [1, 1, 2, 3, 5, 8]; assert_eq!(numbers[0], 1); numbers.swap(0, 5); assert_eq!(numbers[5], 1); }
批量填充新的值
如果需要批量修改数组中的元素, 可以使用这个方法:
use std::sync::atomic::{AtomicI32, Ordering}; fn get_next_id() -> i32 { static NEXT_ID: AtomicI32 = AtomicI32::new(1); NEXT_ID.fetch_add(1, Ordering::Relaxed) } fn main() { let mut numbers = [1, 1, 2, 3, 5]; numbers.fill(0); assert_eq!(numbers, [0, 0, 0, 0, 0]); numbers.fill_with(|| get_next_id().pow(2)); assert_eq!(numbers, [1, 4, 9, 16, 25]); }
搜索
有序数组和元序数组的搜索方式和性能差别很大, 我们放在了 单独的章节.
排序
数组排序的方法比较多, 我们放在排序 这一章单独介绍.