Коллекции Scala - Набор

Scala Set - это набор попарно различных элементов одного типа. Другими словами, Set - это коллекция, не содержащая повторяющихся элементов. Есть два вида наборов:immutable и mutable. Разница между изменяемыми и неизменяемыми объектами заключается в том, что, когда объект неизменен, сам объект не может быть изменен.

По умолчанию 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)

При определении пустого набора аннотация типа необходима, поскольку системе необходимо присвоить конкретный тип переменной.

Основные операции на съемочной площадке

Все операции над множествами могут быть выражены с помощью следующих трех методов:

Старший Нет Методы и описание
1

head

Этот метод возвращает первый элемент набора.

2

tail

Этот метод возвращает набор, состоящий из всех элементов, кроме первого.

3

isEmpty

Этот метод возвращает истину, если набор пуст, в противном случае - ложь.

Попробуйте следующий пример, показывающий использование основных методов работы -

пример

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.++() для объединения двух или более наборов, но при добавлении наборов он удалит повторяющиеся элементы.

Ниже приводится пример объединения двух наборов.

пример

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чтобы узнать общие значения между двумя наборами. Попробуйте следующий пример, чтобы показать использование.

пример

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)