码迷,mamicode.com
首页 > 其他好文 > 详细

13.4.2.2 格式化世界银行的数据

时间:2015-03-09 10:57:53      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:计量单位   类型   管道   lambda   

13.4.2.2 格式化世界银行的数据

我们声明的 readValues 函数,从 XML 文档中读取值,最后一个参数是解析函数,用于将每个数据点转换到适当类型的值。我们下载的数组包含了以平方公里计的三个数据集的面积,和森林覆盖率的三个数据集。清单 13.16 显示了把原始文档转换成数据结构,从中可以方便提取重要信息。

清单 13.16 把原始数据转换成类型化的数据结构 (F#)

let areas = 
  Seq.concat(data.[0..2])     [1]
    |> readValues (fun a -> float(a) * 1.0<km^2>)     [2]
    |> Map.ofSeq     [3]
let forests = 
  Seq.concat(data.[3..5]) 
    |> readValues (fun a -> float(a) * 1.0<percent>) 
    |> Map.ofSeq

在进行管道处理之前,先把表示第一个指标的所有页面中的数据连接起来[1],再把每个值从字符串转换成以平方公里计的数值[2],然后,用数据生成映射(Map)[3]。第二个命令,处理森林覆盖率,与此类似。
数据处理的主要部分使用管道运算,这是一种新功能,我们还没未介绍过,它从数据集中取前三个元素。这称为切片(slicing),语法 data.[0..2] 生成的序列,包含了索引从 0 到 2 的数组项[1]。用 Seq.concat 连接返回的序列,这样,就能得到一个序列,包含所有年份数据的。管道运算的下一步是读这些值,再转换成适当的带计量单位的类型[2]。这外转换变成了最简单的部分,就是简单的 lambda 表达式!要注意的是,世界银行使用点作为分隔符,所以,数字就如 1.0。内置的 float 函数始终使用固定的区域设置,因此,在任何系统上,它都能正确解析字符串[ 不知道说的是什么意思 ]。
我们使用 Map.ofSeq 函数,从数据生成 F# 映射类型[3]。这个函数参数为包含元组的序列,第一个元素是键,第二个元素是值。在清单 13.16 中,键的类型为 int * string,包含年和地区名。第一种情况值的类型为 float

13.4.2.2 格式化世界银行的数据

标签:计量单位   类型   管道   lambda   

原文地址:http://blog.csdn.net/hadstj/article/details/44151835

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!