Scala入门(续)-数组Set/List/排序

Posted 健哥说编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala入门(续)-数组Set/List/排序相关的知识,希望对你有一定的参考价值。

Scala入门()


1、类型和参数化数组

可以使用new来创建实例化对象:

scala> val big = new java.math.BigInteger("12345")

big: java.math.BigInteger = 12345

 

实例化数组:

scala> val strs = new Array[String](3)

strs: Array[String] = Array(null, null, null)

 

scala> strs(0)="Jack"

 

scala> strs(1)="Mary"

 

scala> strs(2)="Alex"

 

scala> print(strs)

[Ljava.lang.String;@7983a5d5

 

遍历:

scala> for(i <- 0 to 2){

     | println(strs(i))

     | }

Jack

Mary

Alex

 

 

2、数组的下标

Scala使用()圆括号来指定下标,而不是[]中括号:

scala> val arr  = Array("Jack","Mary")

arr: Array[String] = Array(Jack, Mary)

 

scala> arr(0)

res18: String = Jack

Arr(0)表示的就是arr.apply(0),apply是数组的一上方法:

scala> arr.apply(0)

res19: String = Jack

 

 

3、创建数组的方式

快速方法创建数组:

scala> val arr  = Array("Jack","Mary")

arr: Array[String] = Array(Jack, Mary)

本质创建数组的方式是: 以下apply方法,可以接收一个变长的参数列表:

scala> val arr = Array.apply("Jack","Jim","Rose")

arr: Array[String] = Array(Jack, Jim, Rose)

4、列表list

列表list是不可变的,对列表进行操作,总会返回一个新的list列表。

scala> val list = List(1,2,3)

list: List[Int] = List(1, 2, 3)

或指定数据类型:

scala> val list = List[Int](33,44,55)

list: List[Int] = List(33, 44, 55)

 

5、列表操作符号

1:::合并两个列表返回一个新的列表

scala> val list1 = List("Jack","Mary")

list1: List[String] = List(Jack, Mary)

 

scala> val list2 = List("Alex","Rose")

list2: List[String] = List(Alex, Rose)

以下合并两个列表:

scala> list1:::list2

res20: List[String] = List(Jack, Mary, Alex, Rose)

 

scala> res20

res21: List[String] = List(Jack, Mary, Alex, Rose)

 

2::发生列表上,它是方法

scala> "Jerry"::list2

res22: List[String] = List(Jerry, Alex, Rose)

等同于以下方法:

scala> list2.::("Smith")

res23: List[String] = List(Smith, Alex, Rose)

说明:因为::List的方法,所以可以写成:List.::(Value)

 

1、使用Nil快速初始化一个列表

初始化一个空列表:

scala> val nn = Nil

nn: scala.collection.immutable.Nil.type = List()

123追加到列表中去,很追加3,再追加2,最后追加1,所以1在最前面:

scala> val nn = 1::2::3::Nil

nn: List[Int] = List(1, 2, 3)

等同于方法.::

scala> val nn = Nil.::(1)

nn: List[Int] = List(1)

等同于方法:.::

scala> val nn = Nil.::(1).::(2)

nn: List[Int] = List(2, 1)

 

6、列表List的一些方法

1、快速声明一个列表:

scala> val a = "Jack"::"Mary"::Nil

a: List[String] = List(Jack, Mary)

2、合并两个列表:

scala> val b = List("A","B"):::List("C","D")

b: List[String] = List(A, B, C, D)

3、获取某个列表,指定下标的元素:

scala> b(2)

res1: String = C

 

scala> b.apply(2)

res2: String = C

4、对列表中,的元素,长度大于,等于多少的进行计数:

以下求列表中的元素长度大于0的进行计数,就是求列表元素的个数呗:

scala> b.count(c=>c.length>0)

res8: Int = 4

列表中的元素长度等于1的个数:

scala> b.count(c=>c.length==1)

res9: Int = 4

5、删除前N个元素,返回一个新的列表:

scala> b.drop(2)

res10: List[String] = List(C, D)

 

scala> res10.drop(2)

res11: List[String] = List()

6、从右边开始删除N个元素:

scala> val list = "A"::"B"::"C"::Nil

list: List[String] = List(A, B, C)

 

scala> list

res12: List[String] = List(A, B, C)

执行删除右边的一个元素,C被删除:

scala> list.dropRight(1)

res13: List[String] = List(A, B)

 

7、判断某个元素是否存在

scala> list.exists(x=>x=="A")

res14: Boolean = true

 

scala> list.exists(x=>x=="B")

res15: Boolean = true

 

8、过虑元素

scala> list.filter(x=>x.length==1)

res16: List[String] = List(A, B, C)

 

scala> list.filter(x=>x=="A")

res17: List[String] = List(A)

 

以下过虑将显示名称中包含a元素的:

scala> val list = "Jack"::"Jerry"::"Mary"::"Mark"::Nil

list: List[String] = List(Jack, Jerry, Mary, Mark)

 

scala> list.filter(x=>x.contains("a"))

res18: List[String] = List(Jack, Mary, Mark)

 

9、判断是否都具有相同的属性

如判断是否值都是Jack

scala> list.forall(x=>x=="Jack")

res19: Boolean = false

如判断是否都包含a这个字母:

scala> res18.forall(x=>x.contains("a"))

res20: Boolean = true

 

10、遍历foreach

 

scala> list.foreach(x=>println(x))

Jack

Jerry

Mary

Mark

或是使用更简单的语法:

scala> list.foreach(println)

Jack

Jerry

Mary

Mark

 

11、第一个元素

scala> list.head

res23: String = Jack

 

12、除最后一个元素外的所有元素

原来的所有元素:

scala> list

res25: List[String] = List(Jack, Jerry, Mary, Mark)

通过init只取除最后一个元素所有元素:

scala> list.init

res24: List[String] = List(Jack, Jerry, Mary)

 

13、判断是否为空

scala> list.isEmpty

res26: Boolean = false

 

14last最后一个元素

scala> list.last

res27: String = Mark

 

15length长度

scala> list.length

res28: Int = 4

 

15、影射并返回一个全新的元素

以下示例,将所有元素后面添加1

scala> list.map(x=>x+"1")

res29: List[String] = List(Jack1, Jerry1, Mary1, Mark1)

 

16、将数组转换成字符串

以下使用,逗号分开所有元素

scala> val str=list.mkString(",")

str: String = Jack,Jerry,Mary,Mark

 

17、filterNot过虑非

以下过虑,将会去除所有包含a字符的元素

scala> list.filterNot(x=>x.contains("a"))

res30: List[String] = List(Jerry)

 

18、倒序

scala> list.reverse

res31: List[String] = List(Mark, Mary, Jerry, Jack)

 

19、排序

scala2.11.7中使用的是sort方法,在scala2.11.8中使用的sortWith,还是感觉sortWith更好用:

小于为0正序:

scala> list.sortWith((x,y)=>x.compareTo(y)<0)

res42: List[String] = List(Jack, Jerry, Mark, Mary)

大于0为倒序:

scala> list.sortWith((x,y)=>x.compareTo(y)>0)

res43: List[String] = List(Mary, Mark, Jerry, Jack)

以下是排序整数的元素:

scala> list2.sortWith((x,y)=>x-y<0)

res46: List[Int] = List(1, 3, 8)

 

scala> list2.sortWith((x,y)=>x-y>0)

res47: List[Int] = List(8, 3, 1)

 

20、除第一个元素之外的其他元素

scala> list.tail

res37: List[String] = List(Jerry, Mary, Mark)




以上是关于Scala入门(续)-数组Set/List/排序的主要内容,如果未能解决你的问题,请参考以下文章

scala冒泡排序

八大种必知排序算法 冒泡排序快速排序 (续)

Scala入门系列:数组

scala入门系列--数组

排序算法——快排思想

[Scala] 快学Scala A2L2