Scala Sets是同一类型的不同元素的集合,换句话说,集合是不包含重复元素的集合。
默认情况下,Scala使用不可变的Set。如果要使用可变Set,则必须显式导入 scala.collection.mutable.Set 类,如果要在同一集合中同时使用可变集和不可变集,则可以继续将不可变集称为 Set ,但可以将可变集称为 mutable.Set 。
//整数类型的空集 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)
在定义一个空集时,类型注释是必需的,因为系统需要将具体类型分配给变量。
集合上的所有运算都可以用以下三种方法表示:
Sr.No | Methods & 描述 |
---|---|
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
您可以使用++运算符或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.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)
以下是在玩Sets时可以使用的重要方法。有关可用方法的完整列表,请查看Scala的官方文档。
Sr.No | Methods 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 计算不可变集合中满足断言的元素数。 |
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] 返回一个包含此不可变集合的所有元素的缓冲区。 链接:https://www.learnfk.comhttps://www.learnfk.com/scala/scala-sets.html 来源:LearnFk无涯教程网 |
45 | def toList:List[A] 返回包含此不可变集合的所有元素的列表。 |
46 | def toMap [T,U]:Map [T,U] 将此不可变集转换为Map |
47 | def toSeq:Seq [A] 返回包含此不可变集合的所有元素的seq。 |
48 | def toString():String 返回对象的字符串表示形式。 |
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)