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.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
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.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] 返回一个包含此不可变集合的所有元素的缓冲区。 |
45 |
def toList:List[A] 返回包含此不可变集合的所有元素的列表。 |
46 |
def toMap [T,U]:Map [T,U] 将此不可变集转换为Map |
47 |
def toSeq:Seq [A] 返回包含此不可变集合的所有元素的seq。 |
48 |
def toString():String 返回对象的字符串表示形式。 |
参考链接
https://www.learnfk.com/scala/scala-sets.html
标签:Set,Scala,Demo,不可,元素,无涯,Sets,集合,def From: https://blog.51cto.com/u_14033984/9443193