码迷,mamicode.com
首页 > 其他好文 > 详细

scala 学习之: list.fill 用法

时间:2016-11-08 16:44:23      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:its   length   size   blog   specified   元组   run   str   div   

题目描述:

Decode a run-length encoded list.
Given a run-length code list generated as specified in problem P10, construct its uncompressed version.
Example:

scala> decode(List((4, a), (1, b), (2, c), (2, a), (1, d), (4, e)))
res0: List[Symbol] = List(a, a, a, a, b, c, c, a, a, d, e, e, e, e)

根据List中的元素,将其展开, 与之前的encodeList 做相反的操作。 

思路: 使用之前提到的foldLeft函数, 从左到右遍历List,将其每一个元组展开,放入初始值里面。

代码:

   def decodeList[T](a:List[(Int, T)]): List[T] = a.foldLeft(List[T]()){
      case (res, cur) => {
           val count = cur._1
           val content = cur._2
           res:::List.fill(count)(content)
       }
      }
    val b = List((10, "a"), (2,"zb"))
    println(decodeList(b))

List.fill:

  def fill[A](n: Int)(elem: => A): CC[A] = {
    val b = newBuilder[A]
    b.sizeHint(n)
    var i = 0
    while (i < n) {
      b += elem
      i += 1
    }
    b.result
  }

向集合中插入n个类型为A的元素。

scala 学习之: list.fill 用法

标签:its   length   size   blog   specified   元组   run   str   div   

原文地址:http://www.cnblogs.com/missmzt/p/6043189.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!