English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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에서 자주 사용되는 메서드를 나열합니다:
순번 | 메서드 및 설명 |
---|---|
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 문서