scala小练习四

本文提供了多个Scala编程题目,涵盖随机数处理、映射函数、列表操作、方差计算、字符频率统计、图像读取、不可变类设计、类型边界以及协变与逆变的理解。通过解决这些挑战,深入理解Scala的特性和语法。
摘要由CSDN通过智能技术生成

1.一千万个随机数,随机数范围在1到1亿之间,现在要求写出一种算法,将1到1亿之间没有出现的随机数求出来
第一题看这里

2 编 写 一 个 函 数 , 接 收 一 个 字 符 串 集 合 , 以 及 一 个 从 字 符 串 到 整 数 的 映 射
,返回整数集合,其值为能和集合中某个字符串相应的映射值。举例来说,给Array(“Tom”,”Fred”,”Harry”) 和Map(“Tom”->3,”Dick”->4,”Harry”->5),返回Array(3,5)

做了两种实现,一种是map,一种是flatMap(注释部分)

//map将集合中的每个元素处理,并将处理后的结果返回,返回的是option
  // 而flatMap与map唯一不一样的地方就是传入的函数在处理完后返回值必须是List
  def func(a: Array[String], m: Map[String, Int]): Array[Int] = {
    //val res = a.flatMap(m.get(_))//简单的实现
    var ans: Array[Int] = Array[Int]()
    val r = a.map(m.get(_))
    for (a <- r) {
      ans = show(a, ans)
    }
    //从Option中取出Some中数据
    def show(r: Option[Int], arr: Array[Int]) = r match {
      case None => arr
      case Some(s) =>  arr :+ s
    }
    ans
  }

这里写图片描述

3.对给定的整型列表lst,(lst :\ ListInt)(:: )得到的是什么? (ListInt /: lst)(:+)又得到什么?如何修改这两个操作,对原来列表反向操作?

val a=(lst :\ ListInt)(::)
等价于
val c=lst.foldRight(ListInt)(+:)
相当于foldRight,添加lst中的元素到ListInt,初始是一个空List
从右开始操作,每次添加的元素在左侧,所以只能用::或+:

val b=(ListInt/:lst)(:+)
等价于
val d=lst.foldLeft(ListInt)(:+)
foldLeft,从左向右添加元素到列表,所以只能用:+


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值