Scala-sets
Scala-セット
Scala Setは、同じタイプのペアごとに異なる要素のコレクションです。 つまり、セットは重複する要素を含まないコレクションです。 Setには、 immutable と mutable の2種類があります。 可変オブジェクトと不変オブジェクトの違いは、オブジェクトが不変の場合、オブジェクト自体を変更できないことです。
デフォルトでは、Scalaは不変のSetを使用します。 可変セットを使用する場合は、 scala.collection.mutable.Set クラスを明示的にインポートする必要があります。 同じコレクションで可変セットと不変セットの両方を使用する場合は、不変セットを引き続き Set として参照できますが、可変セットを mutable.Set として参照できます。
ここに、不変セットを宣言する方法があります-
構文
//Empty set of integer type
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)
空のセットを定義している間、システムは変数に具体的な型を割り当てる必要があるため、型注釈が必要です。
セットの基本操作
セット上のすべての操作は、次の3つの方法の観点から表現することができます-
Sr.No | Methods & Description |
---|---|
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
セットの連結
++ *演算子または Set。++()*メソッドを使用して2つ以上のセットを連結できますが、セットを追加する際に重複する要素は削除されます。
以下は、2つのセットを連結する例です。
例
object Demo {
def main(args: Array[String]) {
val fruit1 = Set("apples", "oranges", "pears")
val fruit2 = Set("mangoes", "banana")
//use two or more sets with ++ as operator
var fruit = fruit1 ++ fruit2
println( "fruit1 ++ fruit2 : " + fruit )
//use two sets with ++ as method
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.min* メソッドを使用して最小値を検出し、 *Set.max* メソッドを使用してセットで使用可能な要素の最大値を検出できます。 以下は、プログラムを表示する例です。
例
object Demo {
def main(args: Array[String]) {
val num = Set(5,6,9,20,30,45)
//find min and max of the elements
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 メソッドを使用して、2つのセット間の共通値を見つけることができます。 次の例を試して、使用方法を示します。
例
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)
//find common elements between two sets
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 Setメソッド
以下は、セットで遊んでいる間に使用できる重要な方法です。 利用可能なメソッドの完全なリストについては、Scalaの公式ドキュメントを確認してください。
Sr.No | Methods with Description |
---|---|
1 |
def PLUS(elem: A): Set[A] 要素が既に存在しない限り、追加の要素で新しいセットを作成します。 |
2 |
def -(elem: A): Set[A] 指定された要素をこのセットから削除して、新しいセットを作成します。 |
3 |
def contains(elem: A): Boolean elemがこのセットに含まれている場合はtrueを返し、そうでない場合はfalseを返します。 |
4 |
def &(that: Set[A]): Set[A] このセットと指定されたセットの両方にあるすべての要素で構成される新しいセットを返します。 |
5 |
def &~(that: Set[A]): Set[A] このセットと別のセットの差を返します。 |
6 |
def PLUS(elem1: A, elem2: A, elems: A): Set[A]* 渡されたセットから追加の要素を持つ新しい不変セットを作成します |
7 |
def PLUSPLUS(elems: A): Set[A] この不変セットを別のコレクションの要素とこの不変セットに連結します。 |
8 |
def -(elem1: A, elem2: A, elems: A): Set[A]* 指定された各引数要素の1つ少ない出現を除いて、現在の不変セットのすべての要素を含む新しい不変セットを返します。 |
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 subsetOf(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] この不変セットをマップに変換します |
47 |
def toSeq: Seq[A] この不変セットのすべての要素を含むseqを返します。 |
48 |
def toString(): String オブジェクトの文字列表現を返します。 |