首页 > 代码库 > 10.2.3 处理数组
10.2.3 处理数组
10.2.3 处理数组
数组相似于简单的计算机内存模型,本质上,就是一组有编号的盒子,只要知道的编号,就可以轻松地读取或更改在任何盒子中的值。数组形成连续的内存块,所以,开销非常小,能用于存储大型数据集;数组[的代间]是提前分配的:一旦创建,其大小就固定了,因此,不能把新的值添加已有的数组中。
数组是可变的数据结构,因此,很容易修改。这在有些情况下是有用的,但对于函数式程序员来说,在有关程序状态方面,就失去了很多保障。我们先来看看基本的 F# 数组的语法,如清单 10.11 所示。
清单10.11创建和使用数组 (F# Interactive)
> let arr = [| 1 .. 5 |];; [1]
val arr : int array = [|1; 2; 3; 4; 5|]
> arr.[2] <- 30;; [2]
val it : unit = ()
> arr;;
val it : int array = [|1; 2; 30; 4; 5|]
> let mutable sum = 0 |
fori in 0 .. arr.Length – 1 do | [3]
sum<- arr.[i] + sum;; |
val mutable sum : int = 42
在 F# 中的数组支持所有的、我们期望数组做的基本操作。这里,我们首先初始化 arr,使用的语法非常类似于列表的初始化[1];接下来,使用赋值运算符改变数组,设定指定索引处的值[2]。注意,在 F# 中访问元素时,必须在指定索引的中括号前写一个点(.);接下来的几行,以命令式风格处理数组[3],使用 for 循环来遍历所有的元素,一个可变值用来保存总和。
如果你觉得清单 10.11有点乱,也不要担心,说明你已经习惯了函数式风格。我们通常不会这样写代码,这里只是为了演示语法。
虽然数组通常用于命令式编程,但一样能名以函数式风格来使用。除了我们已经看到的基本操作以外,F# 还提供了几个类似处理列表的高阶函数。看过使用这些函数处理数组,就不会感觉乱了。
10.2.3 处理数组