强制Scala函数产生“副作用”
来源:互联网 发布:java行业好学吗 编辑:程序博客网 时间:2024/05/29 17:28
最近看到一个有意思的题目:波斯公主选驸马链接 ,手痒想写代码模拟实现一
下。正好在做scala的项目,自然就想用scala来实现。
模型里首先要实现一个”洗牌算法” ,该算法用java实现的话如下:
void MySwap(int &x, int &y) { int temp = x; x = y; y = temp; } void Shuffle(int n) { for(int i=n-1; i>=1; i--) { MySwap(num[i], num[rand()%(i+1)]); } }
很简单,利用java的引用就可以用Myswap函数来交换两者的值,但是这在scala里是行不通的,scala函数只接受val,也就是常量。
怎么办呢?想到了scala里Array的特性:本身是常量,但其元素可以修改,于是实现代码:
def swap(arr:Array[Int],a:Int,b:Int)={ val tmp = arr(a) arr(a)=arr(b) arr(b)=tmp } def shuffle(arr:Array[Int])={ val t = new Random() for(i <- (1 to arr.length-1).toArray.reverse) swap(arr,i,t.nextInt(i+1)) }
之后,用一个 val arr = (0 to 99).toArray 带入函数shuffle中即可
0 0
- 强制Scala函数产生“副作用”
- 函数副作用
- 浅析在类模版中构建成员函数时,使用memcpy产生的副作用
- 什么是函数的副作用?
- 函数的副作用
- 函数的副作用
- 减少函数的副作用
- 函数的副作用
- 深入浅出函数副作用
- 函数的副作用定义
- 函数的副作用及其他
- 函数的副作用及其他
- 函數副作用-纯函数
- 3.1.16 函数的副作用
- JavaScript函数的副作用分析
- 用命令生成器CommandBuilder会产生以下几点副作用
- 全局变量跨越函数之间的副作用
- 调用函数的副作用~~~~~~带图片解释!!!!!!
- Spring Security(12)——Remember-Me功能
- 回调函数(callback)是什么
- 【Zookeeper系列三】ZooKeeper Java API使用
- centos 6.5安装vncserver
- GNU/Linux上程序的国际化和本地化(I18N & I10N)
- 强制Scala函数产生“副作用”
- Spring Security(13)——session管理
- Golang 处理Kafka消息
- iOS CoreAnimation 转场动画 CATransition
- pp看书笔记---设计模式之禅第二版 第五章【迪米特原则】
- sed简介
- JAVA对Redis的使用
- 【Zookeeper系列四】ZooKeeper 分布式锁实现
- Optisystem7中 matlab元件 使用