原文链接:http://blog.csdn.net/ivan_pig/article/details/8257365

--------------------------------------------------

4 数组相关操作

4.1 编写一段代码,将a设置为一个n个随机整数的数组,要求随机数介于0(包含)和n(不包含)之间

random和yield的使用

import scala.collection.mutable.ArrayBuffer
import scala.math.randomdef randomArray(n:Int):Array[Int]={val a = for(i <- 0 until n) yield (random * n).toInta.toArray
}

4.2 编写一个循环,将整数数组中相邻的元素置换。例如,Array(1,2,3,4,5)经过置换后变为Array(2,1,4,3,5)

对数组方法的使用

def reorderArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferfor(i <- 0 until (t.length,2) if i + 1 < t.length){val a = t(i)val b = t(i + 1)t.remove(i,2)t.insert(i,b)t.insert(i + 1,a)}t.toArray
}

4.3 重复前一个练习,不过这一次生成一个新的值交换过的数组。用for/yield

def reorderArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferval result = for(i <- 0 until t.length)yield if(i%2==0 && i + 1 < t.length)t(i + 1)else if(i%2==0 && i + 1 >= t.length)t(i)else t(i - 1)result.toArray
}

感觉代码有点丑也难读。需要优化。

4.4 给定一个整数数组,产生一个新的数组,包含元数组中的所有正值,以原有顺序排列,之后的元素是所有零或负值,以原有顺序排列

//使用循环def reorderArray(arr:Array[Int]):Array[Int]={val a = ArrayBuffer[Int]()val b = ArrayBuffer[Int]()arr.foreach(arg => if(arg > 0) a += arg else b += arg)a ++= ba.toArray}
//使用filter
def reorderArray(arr:Array[Int]):Array[Int]={val a = arr.filter(_ > 0).map(1 * _)val b = arr.filter(_ <= 0).map(1 * _)val c = a.toBufferc ++= bc.toArray
}

4.5 如何计算Array[Double]的平均值?

def aveArray(arr:Array[Double]):Double={arr.sum/arr.length
}

4.6 如何重新组织Array[Int]的元素将他们以反序排列?对于ArrayBuffer[Int]你又会怎么做呢?

def reverseArray(arr:Array[Int]):Array[Int]={arr.reverse
}

4.7 编写一段代码,产出数组中的所有值,去掉重复项。(提示:查看Scaladoc)

产出数组的代码就不编写了。去重只需要调用api即可

def distinctArray(arr:Array[Int]):Array[Int]={val t = arr.toBuffert.distinct.toArray
}

4.8 重新编写3.4节结尾的示例。收集负值元素的下标,反序,去掉最后一个下标,然后对每个下标调用a.remove(i)。比较这样做的效率和3.4节中另外两种方法的效率

性能嘛,自己比较吧!

def removeArray(arr:Array[Int]):Array[Int]={val t = arr.toBufferval idx = ArrayBuffer[Int]()for(i <- 0 until t.length){if(t(i) < 0)idx += i}idx.remove(0)idx.reverseidx.foreach(t.remove(_))t.toArray
}

4.9 创建一个由java.util.TimeZone.getAvailableIDs返回ide时区集合,判断条件是它们在美洲。去掉"America/"前缀并排序

显示的都是中文时间,后续的过滤无法操作。只列出所有的时区

val t = for(i <- getAvailableIDs) yieldgetTimeZone(i).getDisplayName()

4.10 引入java.awt.datatransfer.并构建一个类型为SystemFlavorMap类型的对象:

val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap] 然后以DataFlavor.imageFlavor为参数调用getNativesForFlavor方法,以Scala缓冲保存返回值。 (为什么用这样一个晦涩难懂的类?因为在Java标准库中很难找到使用java.util.List的代码)

val flavors = SystemFlavorMap.getDefaultFlavorMap().asInstanceOf[SystemFlavorMap]
println(flavors.getNativesForFlavor(DataFlavor.imageFlavor).toArray.toBuffer.mkString(" | ")
Blog URL:http://www.ivanpig.com/blog/?p=461

快学Scala习题解答—第三章 数组相关操作相关推荐

  1. 快学Scala习题解答—第四章 映射和元组

    4 映射和元组 4.1 设置一个映射,当中包括你想要的一些装备,以及它们的价格.然后构建还有一个映射.採用同一组键,可是价格上打9折  映射的简单操作 Shell代码   scala> val  ...

  2. 快学Scala习题解答—第一章 基础

    原文链接:http://blog.csdn.net/ivan_pig/article/details/8249768 ----------------------------------------- ...

  3. 快学Scala习题解答—第二章 控制结构和函数

    原文地址:http://blog.csdn.net/ivan_pig/article/details/8253068 ----------------------------------------- ...

  4. 快学Scala习题解答—第十章 特质

    10 特质 10.1 java.awt.Rectangle类有两个非常实用的方法translate和grow,但可惜的是像java.awt.geom.Ellipse2D这种类没有. 在Scala中,你 ...

  5. Scala --- 第三章 数组相关操作

    2019独角兽企业重金招聘Python工程师标准>>> 接下来又开始无聊的基础理论了... 1.定长数组 //初始化为0 val nums = new Array[Int](10) ...

  6. 《快学scala第二版》第一章 练习答案

    1.1 在Scala REPL中键入3.然后按Tab键.有哪些方法可以被应用? 1.2 在Scala REPL中,计算3的平方根,然后再对该值求平方.现在,这个结果与3相差多少?(提示:res变量是你 ...

  7. 《学习OpenCV》课后习题解答(第三章)(仅供参考)

    代码在VS2008下通过,要在附加依赖项中添加:opencv_core220d.lib opencv_highgui220d.lib opencv_imgproc220d.lib. 也可以在代码里面添 ...

  8. 曼昆《经济学原理》(第五版)习题解答 第三章 相互依存性与贸易的好处

    1 .在什么情况下,生产可能性曲线是直线,而不是外凸的? 答:生产可能性曲线会由于机会成本的动态变化而呈现不同形状.在机会成本不变的情况下,生产可能性曲线是一条直线;机会成本递增的时候,生产可能性曲线 ...

  9. java调用geckofx_Scala学习(三)数组相关操作

    1.定长数组 如果你需要一个长度不变的始祖,可以使用Scala中的Array.例如: var arr1 = new Array[Int](10)    //10个整数的数组,所有元素初始化为0.通过简 ...

最新文章

  1. 2.MyBatis 动态SQL
  2. 研究生调剂!!急!!!跪求解答!!?
  3. XX管理包括哪些功能
  4. 成都Uber优步司机奖励政策(4月24日)
  5. 神经网络如何调参、超参数的最优化方法、python实现
  6. 现代操作系统第三版高清.pdf中文版免费下载
  7. linux编译l和l区别,linux 下 g++编译程序时-I(大写i) 与-L(大写l)-l(小写l) 的作用详解...
  8. explain的用法_这次是真拯救了我,MySQL索引优化,explain讲得非常清楚了
  9. Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt
  10. 集成微信支付的代码。兼容小程序,扫码,app,公众号。h5 支付 ,以及 服务商提现...
  11. 黑客观察手机倾斜角度就能猜出你的密码,首次命中率高达74%!
  12. Java同步组件之CyclicBarrier,ReentrantLock
  13. python替换文件中的字符串_Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)...
  14. 下个一个语音,计算机.,中国计算机产业的下一个亮点——汉语语音合成的实用化...
  15. 关闭 kali 警报音
  16. 汽车新能源行业每周新闻纵览
  17. 微信验证码无法连接到服务器,微信无法连接到服务器1237解决方法
  18. Cortex-A7 MPCore 架构
  19. 没“硬货”!不卖手机的苹果做起了信用卡和脱口秀
  20. Bochs源码分析 - 16:conforming与non-conforming代码段区别以及Bochs代码的实现

热门文章

  1. oracle read by other session,AWR报告中,read by other session ,如何解决?
  2. 计算机进制简称,NO.A.0007——二进制;计算机容量单位B、KB、MB、GB和TB关系
  3. 大学期末考java编程题_大学java期末考试考试题和答案
  4. ubuntu18 防火墙关闭_Ubuntu 18.04 关闭及开启防火墙
  5. edges2shoes数据集下载_edges2cats
  6. geoda权重矩阵导入matlab,空间计量经济学-分析解析.ppt
  7. java高级语言特性,Java高级语言特性之注解
  8. linux grub rescue 光盘,Ubuntu9.10用安装光盘如何进入linux rescue方式?
  9. python多线程输出_萌新python多线程
  10. 基于Android的聊天软件,Socket即时通信,实现用户在线聊天