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

Scala Set(集合)

Scalaの集合

Scala Set(集合)は重複するオブジェクトの集合で、すべての要素はユニークです。

Scalaの集合は可変と不可変の集合に分類されます。

デフォルトでは、Scalaは不可変集合を使用しています。可変集合を使用するには、以下を参照する必要があります: scala.collection.mutable.Set パッケージ。

デフォルトで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の集合