English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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
Внимание:Хотя у модифицируемого и немодифицируемого множеств есть операции по добавлению или удалению элементов, существует значительная разница. Операции над немодифицируемым множеством создают новый набор, а исходный набор не изменяется, как и в списке. А операции над модифицируемым множеством изменяют само множество, как 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) // intersection 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 не станет false |
18 | def equals(that: Any): Boolean метод equals можно использовать для любой последовательности. Используется для сравнения серий на равенство. |
19 | def exists(p: (A) => Boolean): Boolean определяет, существует ли элемент, satisfying заданного условия в неизменяемом наборе |
20 | def filter(p: (A) => Boolean): Set[A] вывод всех элементов неизменяемого набора, satisfying заданного условия |
21 | def find(p: (A) => Boolean): Option[A] поиск первого элемента неизменяемого набора, satisfying заданного условия |
22 | def forall(p: (A) => Boolean): Boolean поиск условия, aplicable ко всем элементам этого набора |
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