Scala基础学习02

Posted 南宫峻熙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala基础学习02相关的知识,希望对你有一定的参考价值。

文章目录

统计广州号码段数量

if判断

scala> var x=10
x: Int = 10

scala> if(x==10)
     | println("x=10")
     | else if(x==20)
     | println("x=20")
     | else
     | println("I don't know")
     | 
x=10

循环

for循环语法

for(变量<-集合)循环语句

可以使用a to b表示从a到b的区间,区间包含b
使用a until b表示从a到b的区间,区间不包含b

scala> for(i<-1 to 10)print(i+" ")
1 2 3 4 5 6 7 8 9 10 
scala> for(i<-1 until 10)print(i+" ")
1 2 3 4 5 6 7 8 9 

九九乘法表

scala> for(i<-1 to 9;j<-1 to i)
     | print(j+"*"+i+"="+i*j+" ")
     | if(i==j)println()
     | 
1*1=1 
1*2=2 2*2=4 
1*3=3 2*3=6 3*3=9 
1*4=4 2*4=8 3*4=12 4*4=16 
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 
1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 
1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 
1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 
1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

1~10内大于6的偶数

scala> for(i<-1 to 10;if i%2==0;if i>6)print(i+" ")
8 10 

for循环使用yield可以将返回值作为一个变量存储

scala> var even=for(i<-1 to 10;if i%2==0)yield i
even: scala.collection.immutable.IndexedSeq[Int] = Vector(2, 4, 6, 8, 10)

任务实现

scala> def count(area:String)
     | val arr=Array("115036,1477799,广东,广州,中国移动,020,510000",
     | "115038,1477801,广东,东莞,中国移动,0769,511700",
     | "115033,1477796,广东,广州,中国移动,020,510000",
     | "115032,1477795,广东,广州,中国移动,020,510000")
     | var sum=0
     | for(a<-arr;if a.contains(area))
     | sum+=1
     | println(sum)
     | 
count: (area: String)Unit

scala> count("广州")
3

根据归属地对手机号码段分组

List

scala列表与数组非常相似,列表的所有元素都具有相同的类型。与数组不同的是列表是不可变的,即列表的元素不能通过赋值来更改。

scala> val fruit:List[String]=List("apple","pears","oranges")
fruit: List[String] = List(apple, pears, oranges)

scala> val nums:List[Int]=List(1,2,3,4,5)
nums: List[Int] = List(1, 2, 3, 4, 5)

scala> val double_nums:List[Double]=List(1.0,2.5,3.3)
double_nums: List[Double] = List(1.0, 2.5, 3.3)

scala> val empty:List[Nothing]=List()
empty: List[Nothing] = List()
scala> val fruit:List[String]="apple"::"pears"::"oranges"::Nil
fruit: List[String] = List(apple, pears, oranges)

scala> val nums:List[Int]=1::2::3::4::5::Nil
nums: List[Int] = List(1, 2, 3, 4, 5)

scala> val double_nums:List[Double]=1.0::2.5::3.3::Nil
double_nums: List[Double] = List(1.0, 2.5, 3.3)

scala> val empty:List[Nothing]=Nil
empty: List[Nothing] = List()
列表操作方法描述
def head:A获取列表第一个元素
def init:List[A]返回所有元素,除了最后一个
def last:A获取列表最后一个元素
def tail:List[A]返回所有元素,除了第一个
def :::(prefix:List[A]):List[A]在列表开头添加指定列表的元素
def take(n:Int):List[A]获取列表前n个元素
def contains(elem:Any):Boolean判断列表是否包含指定元素
scala> fruit.head
res5: String = apple

scala> fruit.init
res6: List[String] = List(apple, pears)

scala> fruit.last
res7: String = oranges

scala> fruit.tail
res8: List[String] = List(pears, oranges)

scala> fruit.take(2)
res9: List[String] = List(apple, pears)
scala> val num1:List[Int]=List(1,2,3)
num1: List[Int] = List(1, 2, 3)

scala> val num2:List[Int]=List(4,5,6)
num2: List[Int] = List(4, 5, 6)

scala> num1:::num2
res12: List[Int] = List(1, 2, 3, 4, 5, 6)

scala> num1.:::(num2)
res13: List[Int] = List(4, 5, 6, 1, 2, 3)

scala> List.concat(num1,num2)
res14: List[Int] = List(1, 2, 3, 4, 5, 6)
scala> val num:List[Int]=List(1,2,3,4,5)
num: List[Int] = List(1, 2, 3, 4, 5)

scala> num.contains(3)
res15: Boolean = true

scala> num.contains(6)
res16: Boolean = false

Set

set是没有重复对象的集合,所有元素都是唯一的。

scala> val set:Set[Int]=Set(1,2,3,4,5)
set: Set[Int] = Set(5, 1, 2, 3, 4)

操作set集合的方法和操作列表方法是一样的
合并两个set集合用的是++方法

scala> val set1:Set[Int]=Set(1,2,3)
set1: Set[Int] = Set(1, 2, 3)

scala> val set2:Set[Int]=Set(4,5,6)
set2: Set[Int] = Set(4, 5, 6)

scala> set1++set2
res19: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3, 4)

scala> set1.++(set2)
res20: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3, 4)

Map

Map(映射)是一种可迭代的键值对结构,所有值都可以通过键来获取,并且Map中的键都是唯一的。

scala> person.isEmpty
res0: Boolean = false

scala> person.keys
res1: Iterable[String] = Set(John, Betty, Mike)

scala> person.values
res2: Iterable[Int] = MapLike(21, 20, 22)

元组

元组可以包含不同类型的元素

scala> val t=(1,3.14,"a")
t: (Int, Double, String) = (1,3.14,a)

scala> val t=new Tuple3(1,3.14,"a")
t: (Int, Double, String) = (1,3.14,a)

scala支持的元组最大长度为22.

访问元组元素

scala> t._1
res3: Int = 1

scala> t._3
res4: String = a

函数组合器

map

map是指通过一个函数重新计算列表中的所有元素,并且返回一个相同数目元素的新列表。

scala> val num:List[Int]=List(1,2,3,4,5)
num: List[Int] = List(1, 2, 3, 4, 5)

scala> num.map(x=>x*x)
res5: List[Int] = List(1, 4, 9, 16, 25)

foreach

foreach和map类似,但是foreach没有返回值,只是为了对参数进行作用。

scala> val num:List[Int]=List(1,2,3,4,5)
num: List[Int] = List(1, 2, 3, 4, 5)

scala> num.foreach(x=>print(x*x+"\\t"))
1	4	9	16	25	

filter

filter(过滤)函数移除传入函数的返回值为false的元素

scala> num.filter(x=>x%2==0)
res8: List[Int] = List(2, 4)

flatten

flatten可以把嵌套的结构展开,或者说flatten可以把一个二维列表展开成一个一维列表。

scala> val list=List(List(1,2,3),List(4,5,6))
list: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6))

scala> list.flatten
res9: List[Int] = List(1, 2, 3, 4, 5, 6)

flatMap

flatMap结合了map和flatten的功能

scala> val num:List[List[Int]]=List(List(1,2,3),List(4,5,6))
num: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6))

scala> num.flatMap(x=>x.map(_*2))
res10: List[Int] = List(2, 4, 6, 8, 10, 12)

groupBy

groupBy是对集合中的元素进行分组操作,结果得到的是一个Map

scala> val num:List[Int]=List(1,2,3,4,5,6,7,8,9,10)
num: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> num.groupBy(x=>x%2==0)
res11: scala.collection.immutable.Map[Boolean,List[Int]] = Map(false -> List(1, 3, 5, 7, 9), true -> List(2, 4, 6, 8, 10))

任务实现

scala> val phone:List[String]=List("70999,1371001,广东,广州,中国 510000",
     

以上是关于Scala基础学习02的主要内容,如果未能解决你的问题,请参考以下文章

Scala学习——基础

Scala对于大数据开发重要吗?Scala基础学习建议

scala基础学习

Scala的安装,入门,学习,基础

系统学习scala--基础

Scala基础学习03