F#(数组)

数组的定义:

[<EntryPoint>]
let main argv =
    let iArr1 = [|1; 3; 5; 7; 9|]
    iArr1 |>  printfn "%A"
    let eArr = [| |]
    eArr |>  printfn "%A"
    let iArr2 = [|1..5|]
    iArr2 |>  printfn "%A"
    let iArr3 = [|1..2..10|]
    iArr3 |>  printfn "%A"
    let iArr4 = [|for i in 0..4 -> 2*i+1 |]
    iArr4 |>  printfn "%A"
    let fArr1 = [|for i in 10..-2..0 -> 2.0 * (float i) - 0.5|]
    fArr1 |>  printfn "%A"
    let fArr2 = [|for i in iArr4 -> (float i) / 2.0 |]
    fArr2 |>  printfn "%A"
    let x = fArr1.[1]
    fArr1.[1] <- 7.2
    fArr1.[2] <- fArr1.[2] * 2.0
    let tpArr1 = [| for x in 3..9 -> (x,x*x) |]
    tpArr1 |>  printfn "%A"
    (iArr1 = iArr2) |>  printfn "%b"
    (iArr1 = iArr3) |>  printfn "%b"
    0 // 返回整数退出代码

F#数组定义支持函数式定义,如for表达式等,支持直接比较。当元素的长度与值都相等时则相等,不同数组类型之间是不能比较的。

数组常用函数:

[<EntryPoint>]
let main argv =
    let arr1 = [|2;4;8|]
    let l1 = arr1.Length
    let arr2 = [|1;3;5;7;9|]
    arr1.CopyTo(arr2,2)
    arr2 |> printfn "%A"
    let arr4 = [|0.5..7.5|]
    arr1.CopyTo(arr4,0)
    let arr5 = Array.create 6 2
    let arr6 = [|1..10|]
    let arr7 = Array.sub arr6 0 4
    arr7 |> printfn "%A"
    arr6 |> printfn "%A"
    let arr8 = Array.append arr5 arr7
    arr8 |> printfn "%A"
    let arr9 = [|"北京";"上海";"天津";"重庆"|]
    let arr10 = Array.zip arr7 arr9
    arr10 |> printfn "%A"
    let arr11,arr12 = Array.unzip arr10
    arr11 |> printfn "%A"
    arr12 |> printfn "%A"
    let arr13 = [|1.6;1.9;1.0;0.7|]
    let arr14 = Array.zip3 arr7 arr9 arr13
    arr14 |> printfn "%A"
    let _,arr15,_ = Array.unzip3 arr14
    arr15 |> printfn "%A"
    let fArr3 = [|6.5;1.2;9.8;4.0;7.35;2.4;7.3;9.5|]
    let x1 = Array.average fArr3
    fArr3 |> printfn "%A"
    let x2 = Array.sum fArr3
    x2 |> printfn "%f"
    let fArr4 = Array.sort fArr3
    fArr4 |> printfn "%A"
    fArr3 |> printfn "%A" // sort 函数不改变数组本身
    Array.sortInPlace fArr3 // sortInPlace 函数对数组本身进行排序处理
    0 // 返回整数退出代码

其实和scala没什么太大的区别,标准函数都支持。

二维数组:

[<EntryPoint>]
let main argv =
    let mArr1 = Array2D.create 3 4 1
    mArr1 |> printfn "%A"
    mArr1.[2,1] <- 5
    mArr1.[2,2] <- mArr1.[1,1] + mArr1.[2,1]
    mArr1.[2,3] <- 7
    printfn " Length1=%i, length2=%i" (mArr1.GetLength 0) (mArr1.GetLength 1)
    mArr1 |> printfn "%A"
    let msum (arr : int[,]) =
        let sums = Array.create (arr.GetLength 0) 0
        for i = 0 to (arr.GetLength 0) - 1 do
            for j = 0 to (arr.GetLength 1) - 1 do
                sums.[i] <- sums.[i] + arr.[i,j]
        sums
    (msum mArr1) |> printfn "%A"
    0 // 返回整数退出代码

使用Array2D库创建2维数组msum将每个维度的值求和,最后输出

三维,四维数组:

 let mArr2 = Array3D.create 3 2 3 0.0
    let mArr3 = Array4D.create 2 2 2 3 true
    mArr2.[0,0,0] <- 0.27
    mArr3.[1,1,1,1] <- false

不规则多维数组:

[<EntryPoint>]
let main argv =
    let mArr4 = [|[|1;1|]; [|1;2;1|]; [|1;3;3;1|]|]
    mArr4 |> printfn "%A"
    mArr4.[0] |> printfn "%A"
    let a = mArr4.[1]
    let b,c = a.[0],mArr4.[2].[2]
    printfn "Length=%i GetLength=%i" mArr4.Length (mArr4.GetLength 0)
    for i=0 to mArr4.Length-1 do
        printf "[%i].Length=%i " i mArr4.[i].Length
    let arr1 = [|1..4|]
    let arr2 = [|1..2..10|]
    let mArr5 = [|arr1;arr2;[|for i in arr1 -> 1+i|];[|for i in arr2 -> 2*i|]|]
    mArr5 |> printfn "%A"
    0 // 返回整数退出代码

杨辉三角形:

[<EntryPoint>]
let main argv =
    let yanghui n =
        let arr = Array.create n [|1|]
        printfn "%A" arr
        for i = 1 to n-1 do
            arr.[i] <- (Array.create (i+1) 0)
            arr.[i].[0] <- arr.[i-1].[0]
            for j = 1 to i-1 do
                arr.[i].[j] <- arr.[i-1].[j-1] + arr.[i-1].[j]
            arr.[i].[i] <- arr.[i-1].[i-1]
        arr
    let arr = 10 |> yanghui
    for i in 0..arr.Length-1 do
        printfn "%A" arr.[i]
    0 // 返回整数退出代码
时间: 2024-10-18 12:16:19

F#(数组)的相关文章

hdu 5030 Rabbit&#39;s String(后缀数组&amp;二分)

Rabbit's String Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 288    Accepted Submission(s): 108 Problem Description Long long ago, there lived a lot of rabbits in the forest. One day, the

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

hdu 5030 Rabbit&#39;s String(后缀数组)

题目链接:hdu 5030 Rabbit's String 题目大意:给定k和一个字符串,要求将字符串拆分成k个子串.然后将每个子串中字典序最大的子串选出来,组成一个包含k个字符串的集合,要求这个集合中字典序最大的字符串字典序最小. 解题思路:网赛的时候试图搞了一下这道题,不过水平还是有限啊,后缀数组也是初学,只会切一些水题.赛后看了一下别人的题解,把这题补上了. 首先对整个字符串做后缀数组,除了处理出sa,rank,height数组,还要处理处f数组,f[i]表示说以0~sa[i]开头共有多少

bash shell基础特性之三(数组)

bash shell基础特性之三(数组) 一.数组定义 数组指连续的多个独立内存空间,每个内存空间相当于一个变量. bash shell只支持一维数组,但参数个数没有限制. 数组元素:数组名+索引(从0开始编号) 声明数组:declare -a ARRAR_NAME(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组) 关联数组:declare -A ARRAY_NAME 数组元素的赋值:一次赋值全部元素.指定索引进行赋值.一次只赋值一个元素 (1) array=(var1 va

Perl 哈希、数组 排序

写在前面: 1. 注意use warnings; 后,定义变量前加my 2. 此文转载其他文章,代码修改,适合新版本perl (一) sort函数sort LISTsort BLOCK LISTsort SUBNAME LISTsort的用法有如上3种形式.它对LIST进行排序,并返回排序后的列表.假如忽略了SUBNAME或BLOCK,sort按标准字串比较顺序来进行(例如ASCII顺序).如果指定了SUBNAME,它实际上是个子函数的名字,该子函数对比2个列表元素,并返回一个小于,等于,或大于

【bzoj3744】Gty的妹子序列 分块+树状数组+主席树

题目描述 我早已习惯你不在身边, 人间四月天 寂寞断了弦. 回望身后蓝天, 跟再见说再见…… 某天,蒟蒻Autumn发现了从 Gty的妹子树(bzoj3720) 上掉落下来了许多妹子,他发现 她们排成了一个序列,每个妹子有一个美丽度. Bakser神犇与他打算研究一下这个妹子序列,于是Bakser神犇问道:"你知道区间 [l,r]中妹子们美丽度的逆序对数吗?" 蒟蒻Autumn只会离线乱搞啊……但是Bakser神犇说道:"强制在线." 请你帮助一下Autumn吧.

哈尔滨理工大学2016新生赛F题

给出两个正整数m,n,在笛卡尔坐标系中选出四个不同的点,满足: (1)   点的横坐标是一个在区间[0,m]的整数. (2)   点的纵坐标是一个在区间[0,n]的整数. (3)   这四个点做顶点构成一个菱形. 有多少种满足以上条件的选择方法呢? Input 多组测试数据,每组输入两个正整数m,n(m <= 1000, n <= 1000). 处理到文件结束. Output 每行输出一个整数,表示有多少满足条件的选择方法. Sample Input 2 2 Sample Output 6 #

10.2.3 处理数组

数组相似于简单的计算机内存模型,本质上,就是一组有编号的盒子,只要知道的编号,就可以轻松地读取或更改在任何盒子中的值.数组形成连续的内存块,所以,开销非常小,能用于存储大型数据集:数组[的代间]是提前分配的:一旦创建,其大小就固定了,因此,不能把新的值添加已有的数组中. 数组是可变的数据结构,因此,很容易修改.这在有些情况下是有用的,但对于函数式程序员来说,在有关程序状态方面,就失去了很多保障.我们先来看看基本的 F# 数组的语法,如清单 10.11 所示. 清单10.11创建和使用数组 (F#

PostgreSQL数组使用

原文:https://my.oschina.net/Kenyon/blog/133974 1.数组的定义  不一样的维度元素长度定义在数据库中的实际存储都是一样的,数组元素的长度和类型必须要保持一致,并且以中括号来表示. 合理的: array[1,2]            --一维数组 array[[1,2],[3,5]]  --二维数组 '{99,889}' 不合理的: array[[1,2],[3]]                     --元素长度不一致 array[[1,2],['