数组

package com.zy.scala

object ArrayDemo {
def main(args: Array[String]): Unit = {
//定长数组
val arr1 = new Array[Int](5)
//不定长数组
val arr2 = Array[Int]() val arr3: Array[Int] = Array(1, 2, 3, 4, 5)
println(arr3.toBuffer)
println(arr3(2)) //遍历数组
//初始化一个数组
val arr4 = Array(1, 2, 3, 4, 5, 6, 7, 8)
//增强 for 循环
for (i <- arr4)
println(i) //好用的 until 会生成一个 Range
//reverse 是将前面生成的 Range 反转
for (i <- (0 until arr4.length).reverse)
println(arr4(i)) println("----------------------------------------------")
//数组转换
//yield 关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变
//定义一个数组
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
//将偶数取出乘以 10 后再生成一个新的数组
val res = for (e <- arr if e % 2 == 0) yield e * 10
println(res.toBuffer) //更高级的写法,用着更爽
//filter 是过滤,接收一个返回值为 boolean 的函数
//map 相当于将数组中的每一个元素取出来,应用传进去的函数
val r = arr.filter(_ % 2 == 0).map(_ * 10)
println(r.toBuffer) //排序
val sorted: Array[Int] = arr.sorted
//求和 极值
val sum: Int = arr.sum
val max: Int = arr.max
val min: Int = arr.min } }

映射

package com.zy.scala

import scala.collection.mutable.Map

object MapDemo {
def main(args: Array[String]): Unit = {
//创建映射map
val map1: Map[Int, String] = Map(1 -> "1", 2 -> "2")
println(map1)
val map2: Map[Int, String] = Map((1, "1"), (2, "2"))
println(map2) //获取值
val v1: String = map1(2)
val v2: Option[String] = map1.get(1)
val v3: String = map2.getOrElse(3, "3")
println(v1)
println(v2)
println(v3) //修改值
//改变值需要引入import scala.collection.mutable.Map
map2(1) = "666"
println(map2) //遍历所有的map集合的key
for (i <- map1.keys) {
map1(i)
}
}
}

元组

package com.zy.scala

object TupleDemo {
def main(args: Array[String]): Unit = {
//创建元组
val tuple: (Int, Int, Int, Int, Int) = (1, 2, 3, 4, 5)
println(tuple)
println(tuple._1) //将对偶的集合转换成映射
val arr: Array[(String, Int)] = Array(("zhangsan", 88), ("lisi", 66))
val map1: Map[String, Int] = arr.toMap
println(map1) //拉链操作
val arr1: Array[String] = Array("张学友", "刘德华", "郭富城", "黎明")
val arr2: Array[String] = Array("66", "77", "88", "99")
val zip: Array[(String, String)] = arr1.zip(arr2)
println(zip.toMap) val arr3: Array[String] = Array("66", "77", "88")
val zipAll: Array[(String, String)] = arr1.zipAll(arr3, "黎明", "100")
println(zipAll.toMap)
}
}

集合

list

package com.zy.scala

object ListDemo {
def main(args: Array[String]): Unit = {
def main(args: Array[String]) {
//创建一个不可变的集合
val lst1 = List(1, 2, 3)
//补充:另一种定义 list 方法
val other_lst = 2 :: Nil
//获取集合的第一个元素
val first = lst1.head
//获取集合中除第一个元素外的其他元素集合,
val tail = lst1.tail
//补充:其中如果 List 中只有一个元素,那么它的 head 就是这个元素,它的 tail 就是 Nil;
println(other_lst.head + "----" + other_lst.tail)
//将 0 插入到 lst1 的前面生成一个新的 List
val lst2 = 0 :: lst1
val lst3 = lst1.::(0)
val lst4 = 0 +: lst1
val lst5 = lst1.+:(0)
//将一个元素添加到 lst1 的后面产生一个新的集合
val lst6 = lst1 :+ 3
val lst0 = List(4, 5, 6)
//将 2 个 list 合并成一个新的 List
val lst7 = lst1 ++ lst0
//将 lst0 插入到 lst1 前面生成一个新的集合
val lst8 = lst1 ++: lst0
//将 lst0 插入到 lst1 前面生成一个新的集合
val lst9 = lst1.:::(lst0)
println(other_lst)
println(lst1)
println(first)
println(tail)
println(lst2)
println(lst3)
println(lst4)
println(lst5)
println(lst6)
println(lst7)
println(lst8)
println(lst9)
}
}
}
package com.zy.scala

object ListTest {
def main(args: Array[String]): Unit = { //创建一个List
val list0 = List(1, 7, 9, 8, 0, 3, 5, 4, 6, 2) //获取list集合元素个数
val size: Int = list0.size
println(size) //将list0中的每一个元素乘以10后生成一个新的集合
val list1: List[Int] = list0.map(x => x * 10)
//更简洁的方法
// list0.map(_ * 10)
println("list1==== " + list1) //将list0中的偶数取出来生成一个新的集合 (集合过滤)
val list2: List[Int] = list0.filter(x => x % 2 == 0)
println("list2==== " + list2) //将list0排序后生成一个新的集合
val list3: List[Int] = list0.sorted
val list4: List[Int] = list0.sortBy(x => x)
val list5: List[Int] = list0.sortWith((x, y) => x < y)
println("list3==== " + list3)
println("list4==== " + list4)
println("list5==== " + list5) //反转顺序
val list6: List[Int] = list3.reverse
println("list6==== " + list6) //将list0中的元素4个一组,类型为Iterator[List[Int]]
val list7: Iterator[List[Int]] = list0.grouped(4)
println("list7==== " + list7) //将Iterator转换成List
val list8: List[List[Int]] = list7.toList
println("list8==== " + list8) //将多个list压扁成一个List
val list9: List[Int] = list8.flatten
println("list9==== " + list9) val lines: List[String] = List("hello tom hello jerry", "hello jerry", "hello kitty")
//先按空格切分,在压平
val result1: List[String] = lines.flatMap(_.split(" "))
println("result1==== " + result1) //并行计算求和
val result2: Int = list0.par.sum
println("result2==== " + result2) //化简:reduce
//将非特定顺序的二元操作应用到所有元素
val result3: Int = list0.reduce((x, y) => x + y)
println("result3==== " + result3) //按照特定的顺序
val result4: Int = list0.reduceLeft(_ + _)
val result5: Int = list0.reduceRight(_ + _)
println("result4==== " + result4)
println("result5==== " + result5) //折叠:有初始值(无特定顺序)
val result6: Int = list0.fold(100)((x, y) => x + y)
println("result6==== " + result6) //折叠:有初始值(有特定顺序)
val result7: Int = list0.foldLeft(100)((x, y) => x + y)
println("result7==== " + result7) //聚合
val list10: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8), List(9, 0))
val result8: Int = list10.par.aggregate(10)(_ + _.sum, _ + _)
println("result8==== " + result8) //获取到参与并行计算的线程
println(list10.par.collect {
case _ => Thread.currentThread().getName
}.distinct) val l1: List[Int] = List(5, 6, 4, 7)
val l2: List[Int] = List(1, 2, 3, 4)
//求并集
val r1: List[Int] = l1.union(l2)
println("r1=== " + r1) //求交集
val r2: List[Int] = l1.intersect(l2)
println("r1=== " + r2) //求差集
val r3: List[Int] = l1.diff(l2)
println("r3=== " + r3) } }

set

package com.zy.scala

object SetDemo {
def main(args: Array[String]): Unit = { //val set: Set[Any] = Set("hadoop","hadoop","spark",18) //定义一个set集合
val ints: Set[Int] = Set(1, 2, 3, 4, 5, 6, 7) //获取元素个数有几个
val size: Int = ints.size //获取集合中最大值
val max: Int = ints.max //获取集合中的最小值
val min: Int = ints.min //给set集合添加一个元素
val addElement: Set[Int] = ints + 8
val addElement1: Set[Int] = ints ++ Set(8, 8, 9, 9) //println(addElement1) val set1 = Set(7, 8, 9) //求两个set集合的交集
val ints1: Set[Int] = ints & set1 //求两个set集合的并集,去重操作
val ints2: Set[Int] = ints ++ set1 //求差集
val ints3: Set[Int] = ints -- set1 //返回第一个不同于第二个set的元素集合
val ints4: Set[Int] = ints &~ set1 //对set集合进行过滤统计
val count: Int = ints.count(_ >= 4) println(count) //返回第一个set集合不同于第二个set集合的操作
//(1,2,3,4,5) (3,4,5)
val diff: Set[Int] = ints.diff(set1) println(diff) //返回第二个set集合不同于第一个set集合的操作
val diff1: Set[Int] = set1.diff(ints) println(diff1) //取set集合中子集
val slice: Set[Int] = ints.slice(2, 5) //[2,5) println(ints)
println(slice) val foreach1: Unit = ints.subsets(2).foreach(x => println(x)) println("---------------------------------------------")
val foreach: Unit = ints.subsets(3).foreach(println(_))
}

Scala基础:数组(Array)、映射(Map)、元组(Tuple)、集合(List)的更多相关文章

  1. Scala学习之路 (四)Scala的数组、映射、元组、集合

    一.数组 1.定长数组和变长数组 import scala.collection.mutable.ArrayBuffer object TestScala { def main(args: Array ...

  2. Scala从入门到放弃(三)Scala的数组、映射、元组和集合

    1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...

  3. 学好Spark/Kafka必须要掌握的Scala技术点(一)变量、表达式、循环、Option、方法和函数,数组、映射、元组、集合

    前言 Scala是以JVM为运行环境的面向对象的函数式编程语言,它可以直接访问Java类库并且与Java框架进行交互操作.正如之前所介绍,Spark是用Scala语言编写的,Kafka server端 ...

  4. 《快学Scala》——数组、映射和元组

    数组 定长数组:在Scala中可以用Array,初始化一个定长数组.例如: val nums = new Array[Int](10) //10个整数的数组,所有元素初始化为0 val a = new ...

  5. python 数据类型: 字符串String / 列表List / 元组Tuple / 集合Set / 字典Dictionary

    #python中标准数据类型 字符串String 列表List 元组Tuple 集合Set 字典Dictionary 铭记:变量无类型,对象有类型 #单个变量赋值 countn00 = '; #整数 ...

  6. scala学习笔记(4)映射和元组

    1.构造映射 //构造这样的一个映射 val sources=Map(,,) //构造了一个不可变的Map[String,Int],值不能改变, //可变映射 val scores = new sca ...

  7. JAVA核心技术I---JAVA基础知识(映射Map)

    一:映射Map分类 二:Hashtable(同步,慢,数据量小) –K-V对,K和V都不允许为null –同步,多线程安全 –无序的 –适合小数据量 –主要方法:clear, contains/con ...

  8. 算法与数据结构基础 - 数组(Array)

    数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...

  9. Scala学习笔记(五)—— 元组和集合

    1. 映射 映射Java中的Map,即Key/Value的数据形式 映射的创建,有以下两种方法 scala> val map =Map("Lisa" -> 90 , & ...

  10. scala 学习笔记(02) 元组Tuple、数组Array、Map、文件读写、网页抓取示例

    package yjmyzz import java.io.PrintWriter import java.util.Date import scala.io.Source object ScalaA ...

随机推荐

  1. LeetCode Word Abbreviation

    原题链接在这里:https://leetcode.com/problems/word-abbreviation/description/ 题目: Given an array of n distinc ...

  2. Linux 权限使用 777 真的好吗?

    Linux 权限使用 777 真的好吗? 开发环境当然不是问题,但是会造成一个习惯,到生产时也容易经常配置成 777. 777 权限可以让你的项目出现很大安全问题.1 linux 775和777权限有 ...

  3. iOS中Cookie的管理

    平常的app开发中只调用Rest Api可能用不到Cookie,但是当要在App中内嵌WebView就有可能要用到.最近用到了这一块的东西,总结一下. Cookie原理 关于cookie的原理简单描述 ...

  4. mysql设置合适的索引长度

    理想的索引: 相对于写操作来说,表查询很频繁的表建立索引 字段区分度高 长度小(合适的长度,不是越小越好) 尽量能够覆盖常用字段 这些条件综合起来才能够达到最优索引,本次我们着重聊一下建立合适长度的索 ...

  5. C++关于变量初始化的琐记

    #include <iostream> using namespace std; class Base{ virtual void func1() { cout<<" ...

  6. CentOS 7 named设置主从复制

    前两篇文章介绍了named的安装和配置forward. 本文将介绍named的主从复制. 在从named的配置中添加: zone "weiheng.ink" IN { type s ...

  7. redis数据结构对象

    redis的数据结构对象包括 字符串 列表 哈希 集合 有序集合五种数据结构对象,由底层的8种数据结构组成这五种对象,每种对象的实现不同的数据都是不一样的. 结构 typedef struct red ...

  8. 20165226 2017-2018-4 《Java程序设计》第9周学习总结

    20165226 2017-2018-4 <Java程序设计>第9周学习总结 教材学习内容总结 第十二章 URL类 构造方法1 try { URL url = new URL(" ...

  9. HBase之二:Hbase优化

    1.    预先分区 默认情况下,在创建 HBase 表的时候会自动创建一个 Region 分区,当导入数据的时候,所有的 HBase 客户端都向这一个 Region 写数据,直到这个 Region  ...

  10. Nginx启停

    启动nginx /usr/local/nginx/nginx #不指定配置文件地址/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx. ...