zoukankan      html  css  js  c++  java
  • scala编程第16章学习笔记(2)

    转换列表:toIterator, toArray,copyToArray

    List类的toArray方法将递归存放的列表转换为连续存放的数组

    Array类的toList方法将连续存放的数组转换为递归存放的列表

    scala> val arr = abcde.toArray
    arr: Array[Char] = Array(a, b, c, d, e)
    
    scala> arr.toList
    res24: List[Char] = List(a, b, c, d, e)

    copyToArray方法可以把列表元素复制到目标数组的一段连续空间。
    操作为:xs copyToArray (arr, start)

    把列表xs的所有元素复制到数组arr中,填入位置开始为start。必须确保目标数组arr有足够的空间可以放下全部的列表元素。

    scala> val arr2 = new Array[Int](10)
    arr2: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    
    scala> List(1, 2, 3) copyToArray (arr2, 3)
    
    scala> arr2
    res27: Array[Int] = Array(0, 0, 0, 1, 2, 3, 0, 0, 0, 0)

    如果需要用枚举器访问列表元素,可以使用toIterator方法:

    scala> val it = abcde.toIterator
    it: Iterator[Char] = non-empty iterator
    
    scala> it.next
    res28: Char = a
    
    scala> it.next
    res29: Char = b

     举例:二路归并排序

    object MergeSort extends App {
      /**
     * @author DELL
     * 二路归并排序算法
     *
     */
      def msort[T] (less: (T, T) => Boolean) //less为比较函数
      (xs: List[T]): List[T] = {
        /**
         * @param xs 要合并的有序列表
         * @param ys 要合并的有序列表
         * @return 合并后的列表
         */
        def merge(xs: List[T], ys: List[T]): List[T] =
          (xs, ys) match {
          case (Nil, _) => ys
          case (_, Nil) => xs
          case (x :: xsl, y :: ysl) =>
            if (less(x, y)) x :: merge(xsl, ys)
            else y :: merge(xs, ysl)
        }
        val n = xs.length / 2
        if (n == 0) xs
        else {
          val (ys, zs) = xs splitAt n //把要排序的列表xs平均分成两个列表
          merge(msort(less)(ys), msort(less)(zs))  //先对分后的两个列表归并排序,再对排好的有序表进行归并
        }
      }
    }

    运行实例:

    1.正序排列

    scala> msort((x: Int, y: Int) => x < y) (List (5, 7, 1, 3))
    res0: List[Int] = List(1, 3, 5, 7)

    2.倒序排列

    scala> val reversemsort=msort((x: Int, y: Int) => x > y) _
    reversemsort: List[Int] => List[Int] = <function1>
    
    scala> reversemsort(List(5, 7, 3, 1))
    res3: List[Int] = List(7, 5, 3, 1)
  • 相关阅读:
    个人号微信机器人接口
    js tree 根据子节点找到所有父节点
    大数据分析之纳税人画像-实现和优化思路
    前后端分离项目安全漏洞修复总结
    多租户&多账户&多公众号_saas微信公众平台设计思路
    java7 try-with-resources 很香
    java7 异常处理增强
    java7 try-with-resources 很香
    mysql 按分数段,每个专业分数段统计人数
    一文看懂奈奎斯特定理和香农定理
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4089825.html
Copyright © 2011-2022 走看看