注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

foldLeft测试  

2014-01-03 22:57:02|  分类: Scala |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

为何有sum还要foldLeft?, 为何要用Option?
scala> val flist=Array(Some(1.0f),None,Some(2.0f))
flist: Array[Option[Float]] = Array(Some(1.0), None, Some(2.0))

sum失败:
scala> flist.sum
<console>:9: error: could not find implicit value for parameter num: Numeric[Opt
ion[Float]]
              flist.sum
                    ^
改用foldLeft,则成功:
scala> flist.foldLeft(0.0f)((r,c)=>r + c.getOrElse(0.0f))
res22: Float = 3.0
======================================================================
下面的测试表明Option比NaN有效。
scala> val eles=new Array[Float](3)
eles: Array[Float] = Array(0.0, 0.0, 0.0)

scala> eles(0)=1.0f

scala> eles(1)=Float.NaN

scala> eles
res25: Array[Float] = Array(1.0, NaN, 0.0)

scala> eles.sum
res26: Float = NaN

eles.foldLeft(0.0f)((r,c)=> if (c==Float.NaN) r else r + c)
res27: Float = NaN
======================================================================
foldLeft(0)((r,c) => r+c)
0: 初始值
r: 结果值
c:当前值
求和:
scala> def sum(list: List[Int]): Int = list.foldLeft(1)((r,c) => r+c)
sum: (list: List[Int])Int

scala> val s=sum(List(1,2,3))
s: Int = 6

scala> val s=sum(List())
s: Int = 0

求积:
scala> def product(list: List[Int]): Int = list.foldLeft(1)(_*_)
product: (list: List[Int])Int

scala> val p=product(List(1,2,3))
p: Int = 6

scala> val p=product(List())
p: Int = 1

计数:
scala> def count(list: List[Any]): Int = list.foldLeft(0)((sum,_) => sum + 1)
count: (list: List[Any])Int

scala> val s=count(List(1,2,3))
s: Int = 3

平均:
scala> def average(list: List[Double]): Double = list.foldLeft(0.0)(_+_) / list.size
average: (list: List[Double])Double

scala> val list=List(1.0,2.0,3.0)
list: List[Double] = List(1.0, 2.0, 3.0)

scala> val avg=average(list)
avg: Double = 2.0

  评论这张
 
阅读(600)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017