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的主要内容,如果未能解决你的问题,请参考以下文章