English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Scala Set(집합)

Scala 집합

Scala Set(집합)은 중복된 객체가 없는 객체 집합으로, 모든 요소는 독립적입니다.

Scala의 집합은 변경 가능한 집합과 불변한 집합으로 나뉩니다.

기본적으로, Scala는 불변한 집합을 사용합니다. 불변한 집합을 사용하려면 scala.collection.mutable.Set을 참조해야 합니다: scala.collection.mutable.Set 패키지.

Scala는 기본적으로 scala.collection.immutable.Set을 참조합니다. 불변한 집합의 예제는 다음과 같습니다:

val set = Set(1,2,3)
println(set.getClass.getName) // 
println(set.exists(_ %) 2 == 0)) //true
println(set.drop(1) //Set(2,3)

변경 가능한 집합을 사용하려면 scala.collection.mutable.Set를 참조해야 합니다:

import scala.collection.mutable.Set // 어디서든 변경 가능한 집합을 포함할 수 있습니다.
val mutableSet = Set(1,2,3)
println(mutableSet.getClass.getName) // scala.collection.mutable.HashSet
mutableSet.add(4)
mutableSet.remove(1)
mutableSet += 5
mutableSet -= 2
println(mutableSet) // Set(5, 3, 4)
val another = mutableSet.toSet
println(another.getClass.getName) // scala.collection.immutable.Set

주의:변경 가능한 Set과 불변한 Set 모두 요소를 추가하거나 제거하는 작업을 가지고 있지만, 큰 차이가 있습니다. 불변한 Set에 대한 작업은 새로운 set을 생성하며, 원래의 set은 변경되지 않습니다. 이는 List와 같습니다. 반면에 변경 가능한 Set에 대한 작업은 Set 자체를 변경하며, ListBuffer와 유사합니다.

集合基本操作

Scala集合有三个基本操作:

  • head 返回集合第一个元素

  • tail 返回一个集合,包含除了第一元素之外的其他元素

  • isEmpty 在集合为空时返回true

对于Scala集合的任何操作都可以使用这三个基本操作来表达。示例如下:

object Test {
   def main(args: Array[String]) {
      val site = Set("w3codebox", "Google", "Baidu")
      val nums: Set[Int] = Set()
      println( "第一网站是 : " + site.head )
      println( "最后一个网站是 : " + site.tail )
      println( "查看列表 site 是否为空 : " + site.isEmpty )
      println( "查看 nums 是否为空 : " + nums.isEmpty )
   }
}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ vim Test.scala 
$ scala Test.scala 
第一网站是 : w3codebox
最后一个网站是 : Set(Google, Baidu)
查看列表 site 是否为空 : false
查看 nums 是否为空 : true

连接集合

이를 사용하여 ++ 运算符或 Set.++()) 方法来连接两个集合。如果元素有重复的就会移除重复的元素。示例如下:

object Test {
   def main(args: Array[String]) {
      val site1 = Set("w3codebox", "Google", "Baidu")
      val site2 = Set("Faceboook", "Taobao")
      // ++ 作为运算符使用
      var site = site1 ++ site2
      println( "site1 ++ site2 : " + site )
      //  ++ 作为方法使用
      site = site1.++(site2)
      println( "site1.++(site2) : " + site )
   }
}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ vim Test.scala 
$ scala Test.scala 
site1 ++ site2 : Set(Faceboook, Taobao, Google, Baidu, w3codebox)
site1.++(site2) : Set(Faceboook, Taobao, Google, Baidu, w3codebox)

查找集合中最大与最小元素

이를 사용하여 Set.min 方法来查找集合中的最小元素,使用 Set.max 方法查找集合中的最大元素。示例如下:

object Test {
   def main(args: Array[String]) {
      val num = Set(5,6,9,20,30,45)
      // 查找集合中最大与最小元素
      println( "Set(5,6,9,20,30,45) 集合中的最小元素是 :" + num.min )
      println( "Set(5,6,9,20,30,45) 集合中的最大元素是 :" + num.max )
   }
}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ vim Test.scala 
$ scala Test.scala 
Set(5,6,9,20,30,45) 集合中的最小元素是 : 5
Set(5,6,9,20,30,45) 集合中的最大元素是 : 45

교집합

이를 사용하여 Set.& 메서드 또는  Set.intersect 두 집합의 교집합 요소를 확인하는 메서드를 보여줍니다. 예제는 다음과 같습니다:

object Test {
   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) )
   }
}

위 코드를 실행하면 다음과 같은 출력 결과가 나타납니다:

$ vim Test.scala 
$ scala Test.scala 
num1.&(num2) : Set(20, 9)
num1.intersect(num2) : Set(20, 9)

Scala Set에서 자주 사용되는 메서드

아래 표는 Scala Set에서 자주 사용되는 메서드를 나열합니다:

순번메서드 및 설명
1

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

새로운 요소 x를 추가하여 새로운 집합을 생성하고, 요소가 이미 존재하면 새로운 집합을 생성하지 않음

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]

조건 p이 더 이상 성립하지 않을 때까지 왼쪽에서 오른쪽으로 요소를 버립니다

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

함수를 불변 콜렉션의 모든 요소에 적용합니다

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

불변 집합의 숫자 요소의 곱을 반환합니다

36

def size: Int

불변 집합의 요소 수를 반환합니다

37

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

불변 집합을 두 컨테이너로 분할합니다. 첫 번째는 n 개의 요소로 구성되며, 두 번째는 나머지 요소로 구성됩니다

38

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

집합에 부집합이 있는 경우 true를, 없는 경우 false를 반환합니다

39

def sum: A

불변 집합의 모든 숫자 요소의 합을 반환합니다

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]

불변 집합의 모든 요소를 포함한 List를 반환합니다

46

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

불변 집합의 모든 요소를 포함한 Map을 반환합니다

47

def toSeq: Seq[A]

불변 집합의 모든 요소를 포함한 Seq를 반환합니다

48

def toString(): String

객체로 표현된 문자열을 반환합니다

더 많은 메서드는 참조할 수 있습니다 API 문서

Scala 집합