Scala Sets函数详解

首页 / Scala入门教程 / Scala Sets函数详解

Scala Sets是同一类型的不同元素的集合,换句话说,集合是不包含重复元素的集合。

默认情况下,Scala使用不可变的Set。如果要使用可变Set,则必须显式导入 scala.collection.mutable.Set 类,如果要在同一集合中同时使用可变集和不可变集,则可以继续将不可变集称为 Set ,但可以将可变集称为 mutable.Set 。

Scala Sets - 语法

//整数类型的空集
var s : Set[Int]=Set()

//Set of integer type
var s : Set[Int]=Set(1,3,5,7)

or 

var s=Set(1,3,5,7)

在定义一个空集时,类型注释是必需的,因为系统需要将具体类型分配给变量。

Scala Sets - 基本操作

集合上的所有运算都可以用以下三种方法表示:

Sr.NoMethods & 描述
1

head

此方法返回集合的第一个元素。

2

tail

此方法返回一个集合,该集合包含除第一个元素外的所有元素。

3

isEmpty

如果集合为空,则此方法返回true,否则返回false。


object
Demo { def main(args: Array[String]) { val fruit=Set("apples", "oranges", "pears") val nums: Set[Int]=Set() println( "Head of fruit : " + fruit.head ) println( "Tail of fruit : " + fruit.tail ) println( "Check if fruit is empty : " + fruit.isEmpty ) println( "Check if nums is empty : " + nums.isEmpty ) } }

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

无涯教程网

\>scalac Demo.scala
\>scala Demo
Head of fruit : apples
Tail of fruit : Set(oranges, pears)
Check if fruit is empty : false
Check if nums is empty : true

Scala Sets - 合并

您可以使用++运算符或Set。++()方法来连接两个或多个集合,但是在添加集合时,它将删除重复的元素。

object Demo {
   def main(args: Array[String]) {
      val fruit1=Set("apples", "oranges", "pears")
      val fruit2=Set("mangoes", "banana")

      //两个或多的sets时使用 ++ 运算符
      var fruit=fruit1 ++ fruit2
      println( "fruit1 ++ fruit2 : " + fruit )

      //也可以使用.++函数
      fruit=fruit1.++(fruit2)
      println( "fruit1.++(fruit2) : " + fruit )
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

无涯教程网

\>scalac Demo.scala
\>scala Demo
fruit1 ++ fruit2 : Set(banana, apples, mangoes, pears, oranges)
fruit1.++(fruit2) : Set(banana, apples, mangoes, pears, oranges)

Set Max,Min 方法

您可以使用 Set.min 方法找出最小值,并使用 Set.max 方法找出集合中可用元素的最大值。

object Demo {
   def main(args: Array[String]) {
      val num=Set(5,6,9,20,30,45)

      //找到元素的最小值和最大值
      println( "Min element in Set(5,6,9,20,30,45) : " + num.min )
      println( "Max element in Set(5,6,9,20,30,45) : " + num.max )
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

无涯教程网

\>scalac Demo.scala
\>scala Demo
Min element in Set(5,6,9,20,30,45) : 5
Max element in Set(5,6,9,20,30,45) : 45

查找共同值

您可以使用Set。&方法或Set.intersect方法来找出两个集合之间的公共值。

object Demo {
   def main(args: Array[String]) {
      val num1=Set(5,6,9,20,30,45)
      val num2=Set(50,60,9,20,35,55)

      //找到两个集合之间的共同元素
      println( "num1.&(num2) : " + num1.&(num2) )
      println( "num1.intersect(num2) : " + num1.intersect(num2) )
   }
}

将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。

无涯教程网

\>scalac Demo.scala
\>scala Demo
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)

Scala Sets - 方法

以下是在玩Sets时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的官方文档。

Sr.NoMethods with 描述
1

def +(elem: A): Set[A]

除非该元素已经存在,否则使用附加元素创建一个新集合。

2

def-(elem:A):Set[A]

创建一个新集合,并从该集合中删除给定元素。

3

def contains(elem:A):Boolean

如果元素包含在此集合中,则返回true,否则返回false。

4

def &(that: Set[A]): Set[A]

返回一个新集合,该集合由该集合和给定集合中的所有元素组成。

5

def &~(that: Set[A]): Set[A]

返回此集合与另一个集合的差。

6

def +(elem1: A, elem2: A, elems: A*): Set[A]

使用传递的集合中的其他元素创建一个新的不可变集合

7

def ++(elems: A): Set[A]

将这个不可变集合与另一个集合的元素连接到这个不可变集合。

8

def-(elem1:A,elem2:A,elems:A *):Set[A]

返回一个新的不可变集合,其中包含当前不可变集合的所有元素,但每个给定参数元素的出现次数减少一次。

9

def addString(b:StringBuilder):StringBuilder

将此不可变集的所有元素追加到字符串生成器。

10

def addString(b:StringBuilder,sep:String):StringBuilder

使用分隔符字符串将此不可变集的所有元素追加到字符串生成器。

11

def apply(elem:A)

测试此集合中是否包含某些元素。

12

def count(p: (A) => Boolean): Int

计算不可变集合中满足断言的元素数。

链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-sets.html

来源:LearnFk无涯教程网

13

def copyToArray(xs:Array [A],start:Int,len:Int):Unit

将此不可变集的元素复制到数组。

14

def diff(that:Set [A]):Set [A]

计算此集合与另一个集合的差。

15

def drop(n:Int):Set[A]]

返回除前n个元素外的所有元素。

16

def dropRight(n:Int):Set [A]

返回除最后n个元素外的所有元素。

17

def dropWhile(p: (A) => Boolean): Set[A]

删除满足断言的元素的最长前缀。

18

def equals(that:Any):Boolean

任意序列的equals方法。将此序列与其他对象进行比较。

19

def exists(p: (A) => Boolean): Boolean

测试断言是否对该不可变集合的某些元素成立。

20

def filter(p: (A) => Boolean): Set[A]

返回此不可变集合中所有满足断言的元素。

21

def find(p: (A) => Boolean): Option[A]

查找满足断言(如果有)的不可变集合的第一个元素。

22

def forall(p: (A) => Boolean): Boolean

测试断言是否对这个不可变集合的所有元素成立。

23

def foreach(f: (A) => Unit): Unit

将函数f应用于此不可变集合的所有元素。

24

def head:A

返回此不可变集合的第一个元素。

25

def init:Set [A]

返回除最后一个元素外的所有元素。

26

def intersect(that:Set [A]):Set [A]

计算此集合与另一个集合之间的交集。

27

def isEmpty:Boolean

测试此集合是否为空。

28

def iterator:Iterator [A]

在可迭代对象中包含的所有元素上创建一个新的迭代器。

29

def last:A

返回最后一个元素。

30

def map[B](f: (A) => B): immutable.Set[B]

通过将函数应用于此不可变集合的所有元素来构建新集合。

31

def max:A

查找最大的元素。

32

def min:A

查找最小的元素。

33

def mkString:String

以字符串显示此不可变集合的所有元素。

34

def mkString(sep:String):String

使用分隔符字符串在字符串中显示此不可变集合的所有元素。

35

def product:A

返回相对于num中的*运算符,此不可变集的所有元素的乘积。

36

def size:Int

返回此不可变集中的元素数。

37

def splitAt(n:Int):[Set[A],Set[A])

返回由该不可变集合的前n个元素和其他元素组成的一对不可变集合。

38

def partitionOf(that:Set [A]):Boolean

如果此集合是该集合的子集,即该集合的每个元素也是该集合的元素,则返回true。

39

def sum:A

返回相对于num中的+运算符,此不可变集合的所有元素的总和。

40

def tail:Set[A]

返回一个不可变集,该不可变集由该不可变集的所有元素(第一个元素除外)组成。

41

def take(n:Int):Set[A]

返回前n个元素。

42

def takeRight(n:Int):Set [A]

返回最后的n个元素。

43

def toArray:Array[A]

返回一个包含此不可变集合的所有元素的数组。

44

def toBuffer[B >: A]: Buffer[B]

返回一个包含此不可变集合的所有元素的缓冲区。

45

def toList:List[A]

返回包含此不可变集合的所有元素的列表。

46

def toMap [T,U]:Map [T,U]

将此不可变集转换为Map

47

def toSeq:Seq [A]

返回包含此不可变集合的所有元素的seq。

48

def toString():String

返回对象的字符串表示形式。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

从0开始学架构 -〔李运华〕

编辑训练营 -〔总编室〕

人人都能学会的编程入门课 -〔胡光〕

检索技术核心20讲 -〔陈东〕

职场求生攻略 -〔臧萌〕

Go 并发编程实战课 -〔晁岳攀(鸟窝)〕

Spark核心原理与实战 -〔王磊〕

超级访谈:对话张雪峰 -〔张雪峰〕

LangChain 实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)