Scala数组、集合函数大全P-Z

目录

PRFunctionTest

 SFunctionTest

 TUWZFunctionTest


PRFunctionTest

package test

object PRFunctionTest {
  def main(args: Array[String]): Unit = {
    //padTo 填充序列,如果当前序列长度小于 len,那么新产生的序列长度是 len,多出的几个位值填充 elem,
    // 如果当前序列大于等于 len ,则返回当前序列

    //填充一个长度为 7 的序列,不足位补 8
    val a = Array(1, 2, 3, 4)
    val b = a.padTo(7, 8)
    println(b.mkString(",")) // 1,2,3,4,8,8,8

    //par 返回一个并行实现,产生的并行序列不能被修改
    val a1 = Array(1, 2, 3, 4)
    val b1 = a1.par
    println(b1.mkString(",")) // 1,2,3,4

    //partition 按条件将序列拆分成两个数组,满足条件的放到第一个数组,
    // 其余的放到第二个数组,返回的是包含这两个数组的元组

    //下面以序列元素是否是偶数来拆分
    val a2 = Array(1, 2, 3, 4)
    val b2: (Array[Int], Array[Int]) = a.partition(x => x % 2 == 0)
    println("偶数: " + b2._1.mkString(",")) // 偶数: 2,4
    println("奇数: " + b2._2.mkString(",")) // 奇数: 1,3

    //patch 批量替换,从原序列的 from 处开始,后面的 replaced 个元素,将被替换成序列 that

    //从 a3 的第二个元素开始,取两个元素,即 2 和 3 ,将这两个元素替换为序列 b3
    val a3 = Array(1, 2, 3, 4)
    val b3 = Array(7, 8, 9)
    val c3 = a3.patch(1, b3, 2)
    println(c3.mkString(",")) // 1,7,8,9,4

    //permutations
    //permutations 表示排列,这个排列组合会选出所有排列顺序不同的字符组合,
    //permutations 与 combinations 不同的是,相同的组合考虑排列,对于 “abc”、“cba”,视为不同的组合
    val a4 = Array("a", "b", "c")
    val b4 = a4.permutations.toList
    b4.foreach(x => println(x.mkString(",")))
    /**
      * a,b,c
      * a,c,b
      * b,a,c
      * b,c,a
      * c,a,b
      * c,b,a
      */

    //def prefixLength(p: (T) ⇒ Boolean): Int
    //prefixLength 给定一个条件 p,返回一个前置数列的长度,这个数列中的元素都满足 p
    val a5 = Array(1, 2, 3, 4)
    println(a5.prefixLength(x => x < 3)) // 2

    //product 返回所有元素乘积的值

    val a6 = Array(1, 2, 3, 4)
    println(a6.product) // 1*2*3*4=24

    //reduce 同 fold,不需要初始值
    //def reduce[A1 >: A](op: (A1, A1) ⇒ A1): A1
    def seqno(m: Int, n: Int): Int = {
      val s = "seq_exp = %d + %d"
      println(s.format(m, n))
      m + n
    }

    val a7 = Array(1, 2, 3, 4)
    val b7 = a7.reduce(seqno)
    println("b = " + b7)

    /**
      * seq_exp = 1 + 2
      * seq_exp = 3 + 3
      * seq_exp = 6 + 4
      * b = 10
      */
    //reduceLeft 同 foldLeft,从左向右计算,不需要初始值
    def seqno1(m: Int, n: Int): Int = {
      val s1 = "seq_exp = %d + %d"
      println(s1.format(m, n))
      m + n
    }

    val a8 = Array(1, 2, 3, 4)
    val b8 = a8.reduceLeft(seqno1)
    println("b = " + b8)

    /**
      * seq_exp = 1 + 2
      * seq_exp = 3 + 3
      * seq_exp = 6 + 4
      * b = 10
      */

    //reduceRight 同 foldRight,从右向左计算,不需要初始值
    def seqno2(m: Int, n: Int): Int = {
      val s2 = "seq_exp = %d + %d"
      println(s2.format(m, n))
      m + n
    }

    val a9 = Array(1, 2, 3, 4)
    val b9 = a9.reduceRight(seqno2)
    println("b = " + b9)

    /**
      * seq_exp = 3 + 4
      * seq_exp = 2 + 7
      * seq_exp = 1 + 9
      * b = 10
      */


    //reduceLeftOption 同 reduceLeft,返回 Option
    def seqno3(m: Int, n: Int): Int = {
      val s3 = "seq_exp = %d + %d"
      println(s3.format(m, n))
      m + n
    }
      val a10 = Array(1, 2, 3, 4)
      val b10 = a10.reduceLeftOption(seqno3)
      println("b = " + b10)
      /**
        * seq_exp = 1 + 2
        * seq_exp = 3 + 3
        * seq_exp = 6 + 4
        * b = Some(10)
        */
    //reduceRightOption 同 reduceRight,返回 Option
    def seqno4(m: Int, n: Int): Int = {
      val s4 = "seq_exp = %d + %d"
      println(s4.format(m, n))
      m + n
    }

      val a11 = Array(1, 2, 3, 4)
      val b11 = a11.reduceRightOption(seqno4)
      println("b = " + b11)
      /**
        * seq_exp = 3 + 4
        * seq_exp = 2 + 7
        * seq_exp = 1 + 9
        * b = Some(10)
        */

    //reverse  反转序列
    val a12=Array(1,2,3,4)
    val b12=a12.reverse
    println(b12.mkString(",")) //4,3,2,1

    //reverseIterator 生成反向迭代器
    val a13=Array(1,2,3,4)
    val b13=a13.reverseIterator
    b13.foreach(x=>println(x+"  "))
    /**
      * 4
      * 3
      * 2
      * 1
      */

    //reverseMap 同 map,方向相反
    val a14=Array(1,2,3,4)
    val b14=a14.reverseMap(x=>x*10)
    println(b14.mkString(",")) //40,30,20,10














  }

}

 SFunctionTest

package test

object SFunctionTest {
  def main(args: Array[String]): Unit = {
    //sameElements 判断两个序列是否顺序和对应位置上的元素都一样
    val a = Array(1, 2, 3, 4)

    val b = Array(1, 2, 3, 4)
    println(a.sameElements(b)) // true

    val c = Array(1, 3, 2, 4)
    println(a.sameElements(c)) // false

    //scan 同 fold,scan 会把每一步的计算结果放到一个新的集合中返回,而 fold 返回的是最后的结果
    val a1 = Array(1, 2, 3, 4)
    val b1 = a1.scan(5)(_ + _)
    println(b1.mkString(",")) // 5,6,8,11,15

    //scanLeft 同 foldLeft,从左向右计算,每一步的计算结果放到一个新的集合中返回
    val a2 = Array(1, 2, 3, 4)
    val b2 = a2.scanLeft(5)(_ + _)
    println(b2.mkString(",")) // 5,6,8,11,15

    //scanRight 同 foldRight,从右向左计算,每一步的计算结果放到(从右向左放)一个新的集合中返回
    val a3 = Array(1, 2, 3, 4)
    val b3 = a3.scanRight(5)(_ + _)
    println(b3.mkString(",")) // 15,14,12,9,5

    //segmentLength 从序列的 from 开始向后查找,返回满足条件 p 的连续元素的长度,只返回第一个
    //def segmentLength(p: (T) ⇒ Boolean, from: Int): Int
    val a4 = Array(1, 2, 3, 1, 1, 1,4)
    println(a4.segmentLength(x => x < 3, 3)) // 3

    //seq 产生一个引用当前序列的 sequential 视图
    val a5 = Array(1, 2, 3, 4)
    val b5 = a5.seq
    println(b5.mkString(",")) // 1,2,3,4

    //size 返回序列元素个数,同 length
    val a6 = Array(1, 2, 3, 4)
    println(a6.size) // 4

    //slice 返回当前序列中从 from 到 until 之间的序列,不包括 until 处的元素
    val a7 = Array(1, 2, 3, 4)
    val b7 = a7.slice(1, 3)
    println(b7.mkString(",")) // 2,3

    //sliding(size) 滑动,从第一个元素开始,每个元素和它后面的 size - 1 个元素组成一个数组,
    // 最终组成一个新的集合返回,当剩余元素个数不够 size 时,则结束
//    val a8 = Array(1, 2, 3, 4, 5)
//    val b8 = a8.sliding(3).toList
//    for (i <- 0 to b.length - 1) {
//      val s = "第 %d 组: %s"
//      println(s.format(i + 1, b8(i).mkString(",")))
//    }
    /**
      * 第 1 组: 1,2,3
      * 第 2 组: 2,3,4
      * 第 3 组: 3,4,5
      */

    //sliding(size, step) 从第一个元素开始,每个元素和它后面的 size - 1 个元素组成一个数组,最终组成一个新的集合返回,
    // 当剩余元素个数不够 size 时,则结束。该方法可以设置步长 step,
    // 每一组元素组合完后,下一组从上一组起始元素位置 + step 后的位置处开始
    val a9 = Array(1, 2, 3, 4, 5)
    val b9 = a9.sliding(3, 2).toList
    for (i <- 0 to b9.length - 1) {
      val s1 = "第 %d 组: %s"
      println(s1.format(i + 1, b9(i).mkString(",")))
    }
    /**
      * 第 1 组: 1,2,3
      * 第 2 组: 3,4,5
      */

    //sortBy 按指定的排序规则对序列排序
    val a10 = Array(3, 2, 1, 4)

    val b10 = a10.sortBy(x => x) // 按 x 从小到大,即对原序列升序排列
    println("升序: " + b10.mkString(",")) // 1,2,3,4

    val c10 = a10.sortBy(x => 0 - x) // 按 -x 从小到大,即对原序列降序排列
    println("降序: " + c10.mkString(",")) // 4,3,2,1

    //sorted 使用默认的排序规则对序列排序
    val a11 = Array(3, 2, 1, 4)
    val b11 = a11.sorted // 默认升序排列
    println(b11.mkString(",")) // 1,2,3,4

    //span 将序列拆分成两个数组,从第一个元素开始,直到第一个不满足条件的元素为止,
    // 其中的元素放到第一个数组,其余的放到第二个数组,返回的是包含这两个数组的元组
    val a12 = Array(1, 2, 3, 4)
    val b12 = a12.span(x => x < 3)
    println(b12._1.mkString(",")) // 1,2
    println(b12._2.mkString(",")) // 3,4

    //splitAt 从指定位置开始,把序列拆分成两个数组
    val a13 = Array(1, 2, 3, 4,5,6)
    val b13 = a13.splitAt(3)
    println(b13._1.mkString(",")) //  1,2,3
    println(b13._2.mkString(",")) //  4,5,6

    //startsWith(that) 判断序列是否以某个序列开始
    val a14 = Array(1, 2, 3, 4)
    val b14 = Array(1, 2)
    println(a14.startsWith(b14)) // true

    //startsWith(that, offset) 判断序列从指定偏移处是否以某个序列开始
    val a15 = Array(1, 2, 3, 4)
    val b15 = Array(2, 3)
    println(a15.startsWith(b15, 1)) // true

    //stringPrefix 返回 toString 结果的前缀
    val a16 = Array(1, 2, 3, 4)
    println(a16.toString()) // [I@3ab39c39
    println(a16.stringPrefix) // [I

    //subSequence 返回 start 和 end 间的字符序列,不包含 end 处的元素
    val a17 = Array('a', 'b', 'c', 'd')
    val b17 = a17.subSequence(1, 3)
    println(b17.toString) // bc

    //sum 序列求和,元素需为 Numeric[T] 类型
    val a18 = Array(1, 2, 3, 4)
    println(a18.sum) // 10





  }

}

 TUWZFunctionTest

package test

object TUWZFunctionTest {
  def main(args: Array[String]): Unit = {

    //tail 返回当前序列中不包含第一个元素的序列
    val a = Array(1, 2, 3, 4)
    val b = a.tail
    println(b.mkString(",")) // 2,3,4

    //tails 同 inits,每一步都进行 tail 操作
    val a1 = Array(1, 2, 3, 4)
    val b1 = a1.tails.toList
    for (i <- 0 until b1.length) {
      val s = "第 %d 个值: %s"
      println(s.format(i + 1, b1(i).mkString(",")))
    }
    /**
      * 第 1 个值: 1,2,3,4
      * 第 2 个值: 2,3,4
      * 第 3 个值: 3,4
      * 第 4 个值: 4
      * 第 5 个值:
      */
    //take 返回当前序列中,前 n 个元素组成的序列
    val a2 = Array(1, 2, 3, 4)
    val b2 = a2.take(2)
    println(b2.mkString(",")) // 1,2

    //takeRight 返回当前序列中,从右边开始,后 n 个元素组成的序列
    val a3=Array(1,2,3,4)
    val b3=a3.takeRight(2)
    println(b3.mkString(",")) //3,4

    //takeWhile 返回当前序列中,从第一个元素开始,满足条件的连续元素组成的序列
    val a4 = Array(1, 2, 3, 4)
    val b4 = a4.takeWhile(x => x < 3)
    println(b4.mkString(",")) // 1,2



//    toArray
//    定义:def toArray: Array[A]
//
//    描述:将序列转换成 Array 类型
//
//
//    toBuffer
//    定义:def toBuffer[A1 >: A]: Buffer[A1]
//
//    描述:将序列转换成 Buffer 类型
//
//
//    toIndexedSeq
//    定义:def toIndexedSeq: collection.immutable.IndexedSeq[T]
//
//    描述:将序列转换成 IndexedSeq 类型
//
//
//    toIterable
//    定义:def toIterable: collection.Iterable[T]
//
//    描述:将序列转换成可迭代的类型
//
//
//    toIterator
//    定义:def toIterator: collection.Iterator[T]
//
//    描述:将序列转换成迭代器,同 iterator 方法
//
//
//    toList
//    定义:def toList: List[T]
//
//    描述:将序列转换成 List 类型
//
//
//    toMap
//    定义:def toMap[T, U]: Map[T, U]
//
//    描述:将序列转转换成 Map 类型,需要被转化序列中包含的元素是 Tuple2 类型
//
//
//    toSeq
//    定义:def toSeq: collection.Seq[T]
//
//    描述:将序列转换成 Seq 类型
//
//
//    toSet
//    定义:def toSet[B >: A]: Set[B]
//
//    描述:将序列转换成 Set 类型
//
//
//    toStream
//    定义:def toStream: collection.immutable.Stream[T]
//
//    描述:将序列转换成 Stream 类型
//
//
//    toVector
//    定义:def toVector: Vector[T]
//
//    描述:将序列转换成 Vector 类型

    //transpose 矩阵转置,二维数组行列转换  行转列
    val a5 = Array(Array("a", "b"), Array("c", "d"), Array("e", "f"))
    val b5 = a5.transpose
    b5.foreach(x => println((x.mkString(","))))

    /**
      * a,b
      * c,d
      * e,f
      */
    /**
      * a,c,e
      * b,d,f
      */


    //union 合并两个序列,同操作符 ++
    val a6 = Array((1, 2),(5,6))
    val b6= Array(3, 4)
    val c6 = a6.union(b6)
    println(c6.mkString(",")) // (1,2),(5,6),3,4

    //unzip 将含有两个二元组的数组,每个元组的第一个元素组成一个数组,
    // 第二个元素组成一个数组,返回包含这两个数组的元组
    val chars1 = Array(("a", "b"), ("c", "d"))
    val b7 = chars1.unzip
    println(b7._1.mkString(",")) // a,c
    println(b7._2.mkString(",")) // b,d

    //unzip3 将含有三个三元组的数组,每个元组的第一个元素组成一个数组,
    // 第二个元素组成一个数组,第三个元素组成一个数组,返回包含这三个数组的元组
    val chars2 = Array(("a", "b", "x"), ("c", "d", "y"), ("e", "f", "z"))
    val b8 = chars2.unzip3
    println(b8._1.mkString(",")) // a,c,e
    println(b8._2.mkString(",")) // b,d,f
    println(b8._3.mkString(",")) // x,y,z

    //update 将序列中 i 索引处的元素更新为 x
    //def update(i: Int, x: T): Unit
    val a9 = Array(1, 2, 3, 4)
    a9.update(1, 7)
    println(a.mkString(",")) //1,7,3,4

    //updated  将序列中 i 索引处的元素更新为 x,并返回替换后的数组 副本
    val a10 = Array(1, 2, 3, 4)
    val b10 = a10.updated(1, 7)
    println(b10.mkString(",")) //1,7,3,4

    //view 返回当前序列中从 from 到 until 之间的序列,不包括 until 处的元素
    val a11 = Array(1, 2, 3, 4)
    val b11 = a11.view(1, 3)
    println(b11.mkString(",")) // 2,3

    //withFilter 根据条件 p 过滤元素
    val a12 = Array(1, 2, 3, 4)
    val b12 = a12.withFilter(x => x > 2).map(x => x) //为了可以继续使用过滤
    println(b12.mkString(",")) // 3,4

    val a13 = Array(1, 2, 3, 4)
    val b13 = a13.withFilter(x => x > 2).foreach(println(_))

    /**
      * 3
      * 4
      */

    val b14=a13.filter(x=>x<3)
    println(b14.mkString(","))

    //zip 将两个序列对应位置上的元素组成一个元组数组,要求两个序列长度相同
    val a15 = Array(1, 2, 3, 4)
    val b15 = Array(4, 3, 2, 1)
    val c15 = a15.zip(b15)
    println(c15.mkString(",")) // (1,4),(2,3),(3,2),(4,1)

    //def zipAll[B](that: collection.Iterable[B], thisElem: A, thatElem: B): Array[(A, B)]
    //zipAll 同 zip ,但是允许两个序列长度不同,不足的自动填充,
    // 如果当前序列短,不足的元素填充为 thisElem,
    // 如果 that 序列短,填充为 thatElem
    val a16 = Array(1, 2, 3, 4, 5, 6, 7)
    val b16 = Array(5, 4, 3, 2, 1)
    val c16 = a16.zipAll(b16, 8, 9) // (1,5),(2,4),(3,3),(4,2),(5,1),(6,9),(7,9)
    println(c16.mkString(","))

    val x16 = Array(1, 2, 3, 4)
    val y16 = Array(6, 5, 4, 3, 2, 1)
    val z16 = x16.zipAll(y16, 8, 9) // (1,6),(2,5),(3,4),(4,3),(8,2),(8,1)
    println(z16.mkString(","))

    println("------------------------------------------------------------")
    //zipWithIndex 序列中的每个元素和它的索引组成一个元组数组
    val a17 = Array('a', 'b', 'c', 'd')
    val b17 = a17.zipWithIndex
    println(b17.mkString(",")) // (a,0),(b,1),(c,2),(d,3)






  }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值