数组是固定大小的,从零开始的,可变的连续数据元素的集合,这些数据都是相同类型的。
您可以使用各种方式或使用"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 - 函数通过反转现有数组的顺序来生成新数组。
以下示例演示了这些功能-
(* 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|]
(* 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.
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)