首页 > 其他分享 >无涯教程-Scala Sets函数

无涯教程-Scala Sets函数

时间:2024-01-27 12:31:26浏览次数:28  
标签:Set Scala Demo 不可 元素 无涯 Sets 集合 def

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

相关文章

  • 无涯教程-Scala Lists函数
    Scala列表与数组非常相似,这意味着列表的所有元素都具有相同的类型,但是有两个重要的区别,首先,列表是不可变的,这意味着列表的元素无法通过分配进行更改。元素类型为T的列表的类型写为List[T]。//字符串列表valfruit:List[String]=List("apples","oranges","pears")//整......
  • 无涯教程-Scala - Partially Applied Functions函数
    调用函数时,据说是将函数应用于参数。如果传递所有期望的参数,则说明已完全应用了它。如果仅发送几个参数,则将返回部分应用的函数。这使您可以方便地绑定一些参数,并在以后填充其余参数。尝试以下操作,它是显示部分应用功能的简单示例程序-例importjava.util.Dateobject......
  • 无涯教程-Scala - Currying Functions函数
    Currying将一个包含多个参数的函数转换为一个函数链,每个函数都包含一个参数。咖喱函数定义了多个参数列表,如下所示-语法defstrcat(s1:String)(s2:String)=s1+s2另外,您也可以使用以下语法来定义咖喱函数-语法defstrcat(s1:String)=(s2:String)=>s1+s2......
  • 无涯教程-Scala - Functions with Named Arguments函数
    在普通函数调用中,调用中的参数按照被调用函数的参数顺序一一匹配。命名参数允许您以不同顺序将参数传递给函数。语法很简单,每个参数前面都有一个参数名称和一个等号。尝试下面的程序,这是一个显示带有命名参数的函数的简单示例。例objectDemo{defmain(args:Array[S......
  • 无涯教程-Scala - Functions Call-by-Name函数
    通常,函数的参数是按值参数;也就是说,参数的值是在传递给函数之前确定的。但是,如果我们需要编写一个函数,该函数接受在函数中被调用之前不希望对其求值的表达式作为参数,该怎么办?在这种情况下,Scala提供了按姓名呼叫参数。按名称的呼叫机制将代码块传递给该呼叫,并且每次该呼叫......
  • 无涯教程-Scala - do-while 循环函数
    与while循环在循环顶部测试循环条件不同,do-while循环在循环底部检查其条件,do-while循环与while循环相似,除了保证do-while循环至少执行一次do-while-语法以下是do-while循环的语法。do{statement(s);}while(condition);do-while-流程图尝试使用以下示例......
  • 无涯教程-Scala - while 循环函数
    在给定条件为真时重复一个语句或一组语句,它在执行循环体之前判断条件,只要给定条件为真,while循环语句就会重复执行目标语句。while-语法以下是while循环的语法。while(condition){statement(s);}while-流程图while-示例objectDemo{defmain(args:Array[......
  • 无涯教程-Scala - 文件I/O
    Scala开放使用任何Java对象,java.io.File是可在Scala编程中用于读取和写入文件的对象之一。importjava.io._objectDemo{defmain(args:Array[String]){valwriter=newPrintWriter(newFile("test.txt"))writer.write("HelloScala")writer......
  • 无涯教程-Scala - 提取器
    Scala中的提取器Extractors是一个对象,该对象具有称为unapply的方法,该方法的目的是匹配值并将其拆开。让我们以对象定义apply和unapply方法为示例,apply方法的含义与以往相同:它将Test变成一个对象,该对象可以以与应用方法相同的方式应用于括号中的参数。因此,您可以编写Te......
  • 无涯教程-Scala - 异常处理
    Scala的异常与Java之类的许多其他语言中的异常一样工作,方法可以通过引发异常来终止,但是,Scala实际上没有检查过的异常。当您要处理异常时,可以像在Java中一样使用try{...}catch{...}块,只是catch块使用匹配来识别和处理异常。抛出异常引发异常看起来与Java中相同,创建一个异常......