有没有办法用scala中的高阶方法替换嵌套的For循环

问题描述 投票:0回答:1

我有一个mutableList,并希望获取所有行的总和,并根据某些条件将其行替换为其他值。下面的代码对我来说工作正常,但我想问有没有办法摆脱嵌套的for循环,因为循环会降低性能。我想使用scala高阶方法而不是嵌套for循环。我尝试了flodLeft()更高阶的方法来替换单个for循环但是无法实现替换嵌套for循环

def func(nVect : Int , nDim : Int) : Unit = {

var Vector = MutableList.fill(nVect,nDimn)(math.random)

var V1Res =0.0

var V2Res =0.0

var V3Res =0.0

for(i

for (j

var resultant = Vector(i).zip(Vector(j)).map{case (x,y) => x + y}

V1Res = choice(Vector(i))

V2Res = choice(Vector(j))

V3Res = choice(resultant)

if(V3Res > V1Res){

Vector(i) = res

}

if(V3Res > V2Res){

Vector(j) = res

}

}

}

}

scala

1个回答

1

投票

这段代码中没有“for循环”; for语句已被编译器转换为foreach调用,因此它已经使用了高阶方法。这些foreach调用可以明确写出,但它对性能没有任何影响。

使代码编译然后清理它给出了:

def func(nVect: Int, nDim: Int): Unit = {

val vector = Array.fill(nVect, nDim)(math.random)

for {

i

j

} {

val res = vector(i).zip(vector(j)).map { case (x, y) => x + y }

val v1Res = choice(vector(i))

val v2Res = choice(vector(j))

val v3Res = choice(res)

if (v3Res > v1Res) {

vector(i) = res

}

if (v3Res > v2Res) {

vector(j) = res

}

}

}

请注意,使用单个for对结果没有任何影响,它看起来更好!

此时很难进一步改进。唯一可能的并行性是内部map调用,但矢量化这几乎肯定是一个更好的选择。如果choice很昂贵,那么结果可能会被缓存,但是当vector更新时,需要更新此缓存。

如果choice可以在计算完所有交叉总和之后的第二遍中完成,那么它将更加平行,但显然也会改变结果。

热门问题

scala条件替换_scala - 有没有办法用scala中的高阶方法替换嵌套的For循环 - SO中文参考 - www.soinside.com...相关推荐

  1. scala中的高阶函数_Scala中的高阶函数(HOF)

    scala中的高阶函数 Higher Order Functions (HOF) in Scala are the very core of this functional programming l ...

  2. 【大数据开发】scala——tuple、list(含高阶方法)、wordcount案例、set、并行处理数据和sorted、sortBy、sortWith的区别

    文章目录 一.元组 1.1元组的定义.遍历 1.2元组的拉链.解链 二.list 2.1空list.list初始化.list遍历3种方式 2.2list的追加.拼接操作 2.3list的基本操作 2. ...

  3. Scala中的高阶函数

    Scala混合了面向对象和函数式的特性.在函数式编程语言中,函数是"头等公民",可以像任何其他数据类型一样被传递和操作.每当你想要给算法传入明细动作时这个特性就会变得非常有用.在函 ...

  4. oracle 双引号替换,oracle - Oracle SQL-Loader在值中有效地处理内部双引号 - SO中文参考 - www.soinside.com...

    如果您在封闭的字段中没有管道,则可以从控制文件中执行此操作.如果你可以在一个字段中同时拥有管道和双引号,那么我认为你别无选择,只能对这些文件进行预处理. 你的解决方案[1],取代双引号with an ...

  5. scala编程第16章学习笔记(3)——List类的高阶方法

    列表间映射:map.flatMap和foreach 1.xs map f 操作返回把函数f应用在xs的每个列表元素之后由此组成的新列表.如: scala> List(1, 2, 3) map ( ...

  6. php重构ifelse,php - 重构条件语句PHP - SO中文参考 - www.soinside.com

    我确实使用带有大型if-elseif语句的post方法制作了User类,如下所示: class Users { public static function post($request) { if ( ...

  7. java junit 私有方法_有没有办法在Junit5中的另一个方法中模拟私有方法调用

    下面是我想测试的方法,但据我所知Junit5不支持PowerMockito.那么有什么方法可以在另一个方法内部模拟私有方法调用吗? public Class MyClass { private voi ...

  8. Scala控制抽象:将一段代码作为参数传递给高阶函数去执行

  9. mysql group 条件,mysql - mysql group by,两个条件,限制1 - SO中文参考 - www.soinside.com...

    我想为所有门票选择最早的活动日期.我在mysql中创建了这个查询"tixdate"视图(我用于其他目的),它按票号排序记录,然后按eventdate排序.此视图如下所示: Even ...

最新文章

  1. 最简单的t-SNE上手使用
  2. 你真的了解javascript吗?(一)
  3. oracle SQL以结尾函数,Oracle学习笔记--SQL查询和SQL函数(转) -- 迷失de天空 -- 编程爱好者......
  4. java 实体 text字段,如何在Java中修剪对象的某些字段?
  5. CF401D Roman and Numbers
  6. shell脚本重启tomcat
  7. 【运营】盘点2014,有哪些O2O名牌被撕。
  8. 转【微信小程序 四】二维码生成/扫描二维码
  9. 把第三方jar包放入本地仓库
  10. Angular之Error: ExpressionChangedAfterItHasBeenChecked
  11. 有关启动图片Launch的设置
  12. Spark 系列(一)—— Spark 简介
  13. 深入解析:从源码窥探MySQL优化器
  14. RocketMQ的各种集群模式的搭建和消息可靠性保证和服务可用性描述
  15. Xcode增加头文件搜索路径的方法
  16. 详细分析GitLab CE 已遭在野利用漏洞 (CVE-2021-22205)
  17. ibm v7000配置文档_IBM_V7000底层结构及服务器数据恢复案例详解
  18. asp.net打开客户端bartender文件
  19. VS安装包注册com组件
  20. PLC十字路口交通灯设计

热门文章

  1. java db 10.4.13_Spring Data MongoDB 1.10.13和Mongo 3.4
  2. android gridview显示本地图片大小,在Android上的GridView中调整图像大小
  3. c 程序 实现一元二次方程
  4. 论文笔记 Traffic Data Reconstruction via Adaptive Spatial-Temporal Correlations
  5. MATLAB从入门到精通-新增返回数组高、宽数字特征的全新方式
  6. MATLAB从入门到精通-MATLAB零矩阵zeros()函数使用方法汇总
  7. 数学建模上分利器,小论文中稿神器,赶快学习近15年来较新颖的智能优化算法!
  8. 字节跳动 ClickHouse 在 A/B 实验和模型训练的使用
  9. python插件安装错误解决办法之SyntaxError: from __future__ imports must occur at the beginning of the file原因
  10. Python入门100题 | 第041题