array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 F#学习之路(7)集合类型 - 爱码网

     上一篇博客,介绍了列表类型,本篇将介绍数组类型Array、字典类型(Map),以及可变数组(ResizeArray)、Set类型。

     一、数组类型 (Array)

     数组类型,在语义上表示一组相同类型的集合。这个跟列表(List)相似,两者的区别在于列表类型数据元素不可变,而数组类型可以。虽然数组类型随机访问,在查询访问上性能优先列表,但列表在变更集合(增加、删除集合元素)上有更好的性能。这个跟大多数语言是相似的。

     定义数组类型的语法,跟列表也很相似,区别在于数组多了两个"|"符合。


let arr=[|1;2;3|]

let jaggedArr=[|
                     [
|1;2|];
                     [
|3;4;5|]
                   
|]

     

     arr为一维数组,类型为int array。jaggedArr数组为int array array

     F#数组与c#很相似,有两种类别的数组,一种叫矩形(rectangle)数组,另一种叫锯齿(jagged)数组

     矩形数组,在数字意义上,就是矩阵(matrix),一维数组也叫矢量或向量(vector)。注意锯齿数组内嵌的数组长度不相等。

     在F#中共定义了三个模块来处理数组类型。Array,Array2,Array3,分别用来处理一维、二维、三维数组。

#light

let a=Array2.create 10 20 0 
Array2.iteri (
fun i j item-> printfn "no %d,%d :%A" i j item) a

System.Console.ReadKey(
true|>ignore

 

     a类型为int [,],是一个二维数组。

let a=Array2.create 10 20 0 
a.[
5,5]<-8     
Array2.iteri (
fun i j item-> printfn "no %d,%d :%A" i j item) a   
    
let arr=[|1;3;4|]
printfn 
"%A" arr.[0..2]
    
let c=[|
        [
|1;2|];
        [
|3;4;5|]
       
|]
    
printfn 
"%d" (c.[1].[2])

     从上面的代码可以看出,F#除支持与c#类似的访问方法外,还对一维数组支持范围区间访问语法。     

     

     二、可变数组类型(ResizeArray)

     ResizeArray类型,只是.net 类型 System.Collections.Generic.List泛型类型的别名。ResizeArray长度可变,数据元素可变,很显然这个类型难以保证线程安全,应优先使用F#的List类型。

let b=new ResizeArray<_>()
b.AddRange(seq{
for i in 1..100 ->i})
b.[
5]<-8
b.ForEach((
fun i->printfn "%d" i))

    

     三、键值对类型Map。

     Map类型,不同于.net的System.Collections.Generic.Dictionary类型,Map类型是不可变类型。

let m=Map.add 1 "1" Map.empty
    
for v in m do 
  printfn 
"%A" v

let n=Map.of_list [for key in 1..100 do yield key,key.ToString()]
    
|>Map.iter (fun key value ->printfn "%d %s" key value)

     上面的代码可以看出Map.add函数创建Map类型比较麻烦,通过of_list,of_array,of_seq等函数创建字典比较方便。

     

     四、Set类型

     Set类型,不同于List之处,在于集合中数据是唯一的,不存在两条相等的数据成员。

 Set.of_list ["1";"2";"1"|>Set.iter (fun item ->printfn "%s" item) //1 2

     Set类型,还支持两个Set类型的相交、合并,取子集合等操作     

Set.of_seq (
            seq {
for i in 1..10 ->i})
                - Set.of_list [
1;3;6
        
|> Set.iter (fun item ->printfn "%d" item) //2;4;5;7;8;9;10

 

     集合在日常编程中占据了重要了位置,本文对F#集合类型的技术细节没有进行讨论。

     到本篇博客为止,已经讨论了基本类型、集合类型、元组类型、函数类型。 记录类型,不准备专门讲解,可以阅读从c#3.0到F#,序列seq类型,我不打算在本系列中讨论,因为不讨论计算表达式,序列无法说清。 下一篇博客将讨论模式匹配,这样,基本上F#函数编程范式基本知识讨论完了。

     接下来,我就集中研究函数式编程中一些高级特性,例如组合子,CPS,Monad。希望条件成熟,我另开一个系列来讨论。

               

      下一篇:F#学习之路(8)模式匹配

 

相关文章: