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# 还提供了几个类似处理列表的高阶函数。看过使用这些函数处理数组,就不会感觉乱了。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。