如何在scala中实现通用平均函数?

2024-01-12

对于任何特定类型的数字(即双精度数/整数)来说,这似乎很容易出现问题,但在一般情况下很难编写。

implicit def iterebleWithAvg(data:Iterable[Double]) = new {
    def avg:Double = data.sum / data.size
}

如何对任何类型的数字(Int,Float,Double,BigDecemial)实现此功能?


你必须传递一个隐式的Numeric这将允许求和并转换为 Double:

def average[T]( ts: Iterable[T] )( implicit num: Numeric[T] ) = {
  num.toDouble( ts.sum ) / ts.size
}

编译器将为您提供正确的实例:

scala> average( List( 1,2,3,4) )
res8: Double = 2.5

scala> average( 0.1 to 1.1 by 0.05 )
res9: Double = 0.6000000000000001

scala> average( Set( BigInt(120), BigInt(1200) ) )
res10: Double = 660.0

您可以使用该函数来定义隐式视图(前提是您传播隐式数字依赖项):

implicit def iterebleWithAvg[T:Numeric](data:Iterable[T]) = new {
  def avg = average(data)
}

scala> List(1,2,3,4).avg
res13: Double = 2.5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在scala中实现通用平均函数? 的相关文章

随机推荐

  • 更新现有的 Yaml 文件

    我想更新我现有的user yaml文件而不擦除其他对象或属性 我已经用谷歌搜索了两天寻找解决方案 但没有运气 实际输出 name Test User age 30 address line1 My Address Line 1 line2
  • M1 MBP Rails db:create 引发 msgpack 错误

    您好 我是 Ruby on Rails 新手 当我跑步时rails db create 在M1 MBP上运行时出现以下错误 Library Ruby Gems 2 6 0 gems msgpack 1 4 2 lib msgpack rb
  • (简单)允许 24:00:00 和 00:00:00 作为输入的日期格式

    我已经寻找这个有一段时间了 到目前为止还没有成功 你知道是否有一个 DateFormat 这样的类 它允许我使用 00 00 00 和 24 00 00 作为输入参数 它们都是午夜 但是当调用 getHour 时 结果我会得到 0 或 24
  • 避免调用 Floor()

    我正在编写一段代码 需要处理不一定在 0 到 1 范围内的 uvs 2D 纹理坐标 例如 有时我会得到 u 分量为 1 2 的 uv 为了解决这个问题 我正在实现一个包装 通过执行以下操作来导致平铺 u floor u v floor v
  • gcc -save-temps:如何指定目录

    是否可以指定输出目录 save temps https gcc gnu org onlinedocs gcc Developer Options html Developer Options文物 我知道我可以做一个mv之后但想知道是否有办法
  • NuGet Uninstall.ps1 - 删除项目引用

    因此 在我的 Install ps1 中 我可以添加如下引用 param installPath toolsPath package project project Object References Add YourDLL 如何在 Pow
  • 如何在 R 中查找和求和多列

    假设我有 2 个数据帧 结构如下 GROUPS P1 P2 P3 P4 123 213 312 231 345 123 213 567 个人结果 ID SCORE 123 23 213 12 312 11 213 19 345 10 567
  • 让 Xcode 识别不带“.h”扩展名的 C++ 头文件 (OpenSceneGraph)

    OpenSceneGraph 使用头文件没有 h 扩展名 http www openscenegraph org projects osg wiki Support FAQ WhydonttheOSGheaderfileshavea hor
  • 将双精度型转换为整数何时是未定义的行为

    所以如下 double t 244 233 int a int t 不是未定义的行为 因为 244 可以容纳在里面int我做对了吗 否则 如果它是更大的值而不是 244 它不适合 int 这将是未定义的 我做对了吗 我更感兴趣的是 C 是如
  • 无法启动 Selenium 会话:无法启动新的浏览器会话:启动浏览器时出错

    我像这样初始化硒 public void setUp throws Exception setUp http localhost firefox 我用类似的方法编写测试 public void testUntitled throws Exc
  • 使用应用函子对选项列表求和

    我有一个 List Option Int 并想使用应用函子对其进行求和 从 1 我了解到它应该类似于以下内容 import scalaz import Scalaz List 1 2 3 map some foldLeft some 0 c
  • Rails:论坛类网站中用户->帖子->评论模型的最佳关联模型?

    我正在创建一个论坛网站 每个注册用户都可以在其中撰写许多帖子并每个帖子可以有很多评论 此外 每个用户都可以对任何其他用户创建的任何帖子发表评论 has many has many user gt Posts gt Comments has
  • 我如何有效地使用 angularjs 并牢记安全性?

    当我知道它们不安全时 为什么我应该使用 angular js 或其他类似的 js 框架 我所说的安全性是指 所有代码都是用纯 JavaScript 编写的 可以在 devtools 或 firebug 中编辑 javascript 像表单提
  • 派生模板类对基类成员数据的访问

    这个问题是对以下问题的进一步推进这个线程 https stackoverflow com questions 1117693 initializing template base class member types in derived
  • 如何在 C# 中重新创建调用 TREND() 的 Excel 公式?

    我正在构建一个 net 页面来模仿电子表格 该表包含此公式 ROUND TREND AA7 AE7 AA 4 AE 4 AF 4 1 有人可以提供相当于 C 的内容吗TREND 或者 如果任何人都可以提供围绕它的快捷方式 那也很好 我对那里
  • 删除“;”和“CRLF”之间的所有空格

    我正在使用 Notepad v8 4 6 我想替换后面的所有空格 在 Windows 上位于该行的末尾 我用过这个 s 1 r n 它找到正确 但是当我尝试替换时 删除之间的所有空格 和 CRLF 它没有任何作用 如何删除之间的所有空格 a
  • .NET 4.5 通用成员资格提供程序表名称

    有没有办法在数据库中为新的 NET 4 5 DefaultMembershipProvider 表名添加前缀 它们过去被命名为 aspnet Users aspnet Roles 等 现在只被命名为 Users Roles 等 这与我的具有
  • ODI12c 中每个映射的最大用户数

    我是 ODI 新手 在从事 ODI 项目时 我面临一个问题 我在 ODI12c 中有 10 个映射 并且所有映射都使用相同的目标表 但由于某些性能问题 我希望一次最多只有 2 个用户可以执行映射 最多 2 个映射 因为他们使用相同的目标表
  • 从 XMLReader 打开 simplexml 中的 CData

    我有一堆 XML 文件 我使用 XMLReader 将其加载到我的脚本中 创建 DOM 对象 然后转换为 Simplexml 问题是 XML 文件之一使用 SIMPLEXML 忽略的 CDATA 并且通常使用 SIMPLEXML LOAD
  • 如何在scala中实现通用平均函数?

    对于任何特定类型的数字 即双精度数 整数 来说 这似乎很容易出现问题 但在一般情况下很难编写 implicit def iterebleWithAvg data Iterable Double new def avg Double data