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

Внимание:Хотя у модифицируемого и немодифицируемого множеств есть операции по добавлению или удалению элементов, существует значительная разница. Операции над немодифицируемым множеством создают новый набор, а исходный набор не изменяется, как и в списке. А операции над модифицируемым множеством изменяют само множество, как 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

intersection

Вы можете использовать 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

В таблице ниже перечислены常用 методы 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

Сборники Scala