Scala Set(集合)
Scala Set(集合)は重複しないオブジェクトの集合で、すべての要素は一意です。
Scala コレクションは、可変のコレクションと不可変のコレクションに分けられます。
デフォルトでは、Scala は不可変コレクションを使用します。可変コレクションを使用したい場合は、scala.collection.mutable.Setパッケージを参照する必要があります。
デフォルトでは scala.collection.immutable.Set を参照し、不可変集合の実例は次のとおりです:
実例
println(set.getClass.getName) //
println(set.exists(_ % 2 == 0)) //true
println(set.drop(1)) //Set(2,3)
可変コレクションを使用する必要がある場合は、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 のコレクションには3つの基本操作があります:
-
headコレクションの最初の要素を返します。 -
tail最初の要素以外の要素を含むコレクションを返します。 -
isEmptyコレクションが空の場合に true を返します。
Scala のコレクションに対するあらゆる操作は、これらの3つの基本操作を使って表現できます。例は次のとおりです:
実例
def main(args: Array[String]) {
val site = Set("サンプル", "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 第一网站是 : サンプル 最后一个网站是 : Set(Google, Baidu) 查看列表 site 是否为空 : false 查看 nums 是否为空 : true
集合の連結
あなたは使用できます++演算子またはSet.++()メソッドを使用して2つの集合を連結できます。要素が重複している場合は、重複した要素が削除されます。例は次のとおりです:
実例
def main(args: Array[String]) {
val site1 = Set("サンプル", "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, サンプル) site1.++(site2) : Set(Faceboook, Taobao, Google, Baidu, サンプル)
集合内の最大要素と最小要素を検索
あなたは使用できますSet.minメソッドを使用して集合内の最小要素を検索し、Set.maxメソッドを使用して集合内の最大要素を検索します。
実例
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メソッドを使用して2つの集合の積集合の要素を確認できます。例は次のとおりです:
実例
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] 集合に新しい要素を追加し、新しい集合を作成します(要素がすでに存在する場合は除く)。 |
| 2 |
def -(elem: A): Set[A] 集合から要素を削除し、新しい集合を作成します。 |
| 3 |
def contains(elem: A): Boolean 要素が集合内に存在する場合は true を返し、それ以外の場合は false を返します。 |
| 4 |
def &(that: Set[A]): Set[A] 2つの集合の積集合を返します。 |
| 5 |
def &~(that: Set[A]): Set[A] 2つの集合の差集合を返します。 |
| 6 |
def +(elem1: A, elem2: A, elems: A*): Set[A] 渡された指定集合の要素を追加して、新しい不可変集合を作成します。 |
| 7 |
def ++(elems: A): Set[A] 2つの集合をマージします。 |
| 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] 2つの集合の差集合を比較します。 |
| 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] 2つの集合の積集合を計算します。 |
| 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]) 不可変集合を2つのコンテナに分割します。最初のコンテナは最初の n 個の要素で構成され、2番目のコンテナは残りの要素で構成されます。 |
| 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 コレクション