《快学Scala》第4章 映射和元组 练习

1. 设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用同一组键,但在价格上打9折。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val books = Map("快学Scala" -> 79.0, "机器学习实战" -> 69.0, "JavaScript面向对象编程指南" -> 59.0)
    val b = (for ((k, v) <- books) yield (k, v * 0.9))
    println(books.mkString(","))
    println(b.mkString(","))
  }
}
2. 编写一段程序,从文件中读取单词。用一个可变映射来清点每一个单词出现的频率。

import java.io.File
import java.util.Scanner
import scala.collection.mutable

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val in = new Scanner(new File("myfile.txt"))
    val map = new mutable.HashMap[String,Int]()
    while (in.hasNext()) {
      val s = in.next()
      map(s) = map.getOrElse(s, 0) + 1
    }
    println(map.mkString(", "))
  }
}
3. 重复前一个练习,这次用不可变的映射。

import java.io.File
import java.util.Scanner

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val in = new Scanner(new File("myfile.txt"))
    val map = Map[String,Int]()
    var m = map
    while (in.hasNext()) {
      val s = in.next()
      m += (s -> (m.getOrElse(s, 0) + 1))
    }
    println(m.mkString(", "))
  }
}
4. 重复前一个练习,这次用已排序的映射,以便单词可以按顺序打印出来。

import java.io.File
import java.util.Scanner
import scala.collection.SortedMap

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val in = new Scanner(new File("myfile.txt"))
    val map = SortedMap[String,Int]()
    var m = map
    while (in.hasNext()) {
      val s = in.next()
      m += (s -> (m.getOrElse(s, 0) + 1))
    }
    println(m.mkString(", "))
  }
}
5. 重复前一个练习,这次用java.util.TreeMap并使之适用于Scala API。

import java.io.File
import java.util.Scanner
import scala.collection.JavaConversions.mapAsScalaMap

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val in = new Scanner(new File("myfile.txt"))
    val map: scala.collection.mutable.Map[String,Int] = new java.util.TreeMap[String,Int]
    while (in.hasNext()) {
      val s = in.next()
      map(s) = map.getOrElse(s, 0) + 1
    }
    println(map.mkString(", "))
  }
}
6. 定义一个链式哈希映射,将“Monday”映射到java.util.Calendar.MONDAY,依此类推加入其他日期。展示元素是以插入的顺序被访问的。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val days = new scala.collection.mutable.LinkedHashMap[String,Int]()
    days("Monday") = java.util.Calendar.MONDAY
    days("Tuesday") = java.util.Calendar.TUESDAY
    days("Thursday") = java.util.Calendar.THURSDAY
    days("Wednesday") = java.util.Calendar.WEDNESDAY
    days("Friday") = java.util.Calendar.FRIDAY
    days("Saturday") = java.util.Calendar.SATURDAY
    days("Sunday") = java.util.Calendar.SUNDAY
    println(days.mkString(","))
  }
}
7. 打印出所有Java系统属性的表格。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

import scala.collection.JavaConversions.propertiesAsScalaMap

object ScalaApp {
  def main(args: Array[String]) {
    val props: scala.collection.Map[String,String] = System.getProperties()
    var len = 0
    for ((k, _) <- props) {
      if (len < k.length) len = k.length
    }
    for ((k, v) <- props) {
      print(k)
      print(" " * (len - k.length))
      print(" | ")
      println(v)
    }
  }
}
8. 编写一个函数minmax(values: Array[Int]),返回数组中最小值和最大值的对偶。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

import scala.collection.JavaConversions.propertiesAsScalaMap

object ScalaApp {
  def minmax(values: Array[Int]) = {
    var max = values(0)
    var min = values(0)
    for (v <- values) {
      if (max < v) max = v
      if (min > v) min = v
    }
    (min, max)
  }

  def main(args: Array[String]) {
    val a = Array(1, 2, 3, 4, 5, 6)
    val (min, max) = minmax(a)
    println(min, max)
  }
}
9. 编写一个函数lteqgt(values: Array[Int], v: Int),返回数组中小于v,等于v和大于v的数量,要求三个值一起返回。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def lteqgt(values: Array[Int], v: Int) = {
    var lt, eq, gt = 0
    for (n <- values) {
      if (n < v) lt += 1
      else if (n == v) eq += 1
      else gt += 1
    }
    (lt, eq, gt)
  }

  def main(args: Array[String]) {
    val a = Array(1, 2, 3, 4, 5, 6)
    println(lteqgt(a, 3))
  }
}
10. 当你将两个字符串拉链在一起,比如"Hello".zip("World"),会是什么结果?想出一个讲得通的用例。

/**
 * Created by Ibuki Suika on 2014/5/26.
 */

object ScalaApp {
  def main(args: Array[String]) {
    val t1 = "Hello".zip("World")
    val t2 = "1234".zip("123456")
    val t3 = "123456".zip("12")
    println(t1)
    println(t2)
    println(t3)
  }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值