F# - 数组(Arrays)

F# - 数组(Arrays) 首页 / F#入门教程 / F# - 数组(Arrays)

数组是固定大小的,从零开始的,可变的连续数据元素的集合,这些数据都是相同类型的。

创建数组

您可以使用各种方式或使用"Arrays"模块中的函数来创建数组,在本节中,无涯教程将讨论不使用模块函数创建数组的情况。

以下示例演示如何创建数组-

//使用分号分隔符
let array1 = [| 1; 2; 3; 4; 5; 6 |]
for i in 0 .. array1.Length - 1 do
   printf "%d " array1.[i]
printfn" "

//没有分号分隔符
let array2 =
   [|
      1
      2
      3
      4
      5
   |]
for i in 0 .. array2.Length - 1 do
   printf "%d " array2.[i]
printfn" "

//使用序列
let array3 = [| for i in 1 .. 10 -> i * i |]
for i in 0 .. array3.Length - 1 do
   printf "%d " array3.[i]
printfn" "

编译并执行程序时,将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-arrays.html

来源:LearnFk无涯教程网

1 2 3 4 5 6
1 2 3 4 5
1 4 9 16 25 36 49 64 81 100

数组函数

数组模块提供了几个从头开始创建数组的功能。

  • Array.empty            - 函数创建一个新的空数组。

  • Array.create            - 函数创建一个指定大小的数组,并将所有元素设置为给定值。

  • Array.init                 -  创建一个数组,给定尺寸和生成元素的函数。

  • Array.zeroCreate    - 函数创建一个数组,其中所有元素都初始化为零值。

  • Array.copy               - 函数创建一个新数组,其中包含从现有数组复制的元素。

  • Array.sub                 - 函数从数组的子范围生成一个新数组。

  • Array.append          - 函数通过组合两个现有数组来创建一个新数组。

  • Array.choose           - 函数选择要包含在新数组中的数组元素。

  • Array.collect            - 函数在现有数组的每个数组元素上运行一个指定的函数,然后收集该函数生成的元素并将它们组合为一个新数组。

  • Array.concat            - 函数采用一系列数组,并将它们组合成单个数组。

  • Array.filter               - 函数采用布尔条件函数,并生成一个新数组,该数组仅包含条件为true的输入数组中的那些元素。

  • Array.rev                  - 函数通过反转现有数组的顺序来生成新数组。

以下示例演示了这些功能-

示例1

(* using create and set *)
let array1 = Array.create 10 ""
for i in 0 .. array1.Length - 1 do
   Array.set array1 i (i.ToString())
for i in 0 .. array1.Length - 1 do
   printf "%s " (Array.get array1 i)
printfn " "

(* empty array *)
let array2 = Array.empty
printfn "Length of empty array: %d" array2.Length

let array3 = Array.create 10 7.0
printfn "Float Array: %A" array3

(* using the init and zeroCreate *)
let array4 = Array.init 10 (fun index -> index * index)
printfn "Array of squares: %A" array4

let array5 : float array = Array.zeroCreate 10
let (myZeroArray : float array) = Array.zeroCreate 10
printfn "Float Array: %A" array5

编译并执行程序时,将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-arrays.html

来源:LearnFk无涯教程网

0 1 2 3 4 5 6 7 8 9
Length of empty array: 0
Float Array: [|7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0; 7.0|]
Array of squares: [|0; 1; 4; 9; 16; 25; 36; 49; 64; 81|]
Float Array: [|0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0; 0.0|]

示例2

(* creating subarray from element 5 *)
(* containing 15 elements thereon *)

let array1 = [| 0 .. 50 |]
let array2 = Array.sub array1 5 15
printfn "Sub Array:"
printfn "%A" array2

(* appending two arrays *)
let array3 = [| 1; 2; 3; 4|]
let array4 = [| 5 .. 9 |]
printfn "Appended Array:"
let array5 = Array.append array3 array4
printfn "%A" array5

(* using the Choose function *)
let array6 = [| 1 .. 20 |]
let array7 = Array.choose (fun elem -> if elem % 3 = 0 then
   Some(float (elem))
      else
   None) array6

printfn "Array with Chosen elements:"
printfn "%A" array7

(*using the Collect function *)
let array8 = [| 2 .. 5 |]
let array9 = Array.collect (fun elem -> [| 0 .. elem - 1 |]) array8
printfn "Array with collected elements:"
printfn "%A" array9

编译并执行程序时,将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-arrays.html

来源:LearnFk无涯教程网

Sub Array:
[|5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|]
Appended Array:
[|1; 2; 3; 4; 5; 6; 7; 8; 9|]
Array with Chosen elements:
[|3.0; 6.0; 9.0; 12.0; 15.0; 18.0|]
Array with collected elements:
[|0; 1; 0; 1; 2; 0; 1; 2; 3; 0; 1; 2; 3; 4|]

搜索数组

Array.find                  -  函数采用布尔函数,并返回该函数返回true的第一个元素,否则引发KeyNotFoundException。

Array.findIndex         -  函数的工作原理类似,只是它返回元素的索引而不是元素本身。

下面的示例演示了这一点。

let array1 = [| 2 .. 100 |]
let delta = 1.0e-10
let isPerfectSquare (x:int) =
   let y = sqrt (float x)
   abs(y - round y) < delta

let isPerfectCube (x:int) =
   let y = System.Math.Pow(float x, 1.0/3.0)
   abs(y - round y) < delta

let element = Array.find (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1

let index = Array.findIndex (fun elem -> isPerfectSquare elem && isPerfectCube elem) array1

printfn "The first element that is both a square and a cube is %d and its index is %d." element index

编译并执行程序时,将产生以下输出-

链接:https://www.learnfk.comhttps://www.learnfk.com/fsharp/fsharp-arrays.html

来源:LearnFk无涯教程网

The first element that is both a square and a cube is 64 and its index is 62.

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

微服务架构核心20讲 -〔杨波〕

数据结构与算法之美 -〔王争〕

说透中台 -〔王健〕

安全攻防技能30讲 -〔何为舟〕

NLP实战高手课 -〔王然〕

Web安全攻防实战 -〔王昊天〕

手机摄影 -〔@随你们去〕

成为AI产品经理 -〔刘海丰〕

Python自动化办公实战课 -〔尹会生〕

好记忆不如烂笔头。留下您的足迹吧 :)