Коллекции Scala - Кортеж

Кортеж Scala объединяет фиксированное количество элементов вместе, так что их можно передавать как единое целое. В отличие от массива или списка, кортеж может содержать объекты разных типов, но они также неизменяемы.

Ниже приведен пример кортежа, содержащего целое число, строку и консоль.

val t = (1, "hello", Console)

Что является синтаксическим сахаром (сокращенно) для следующего:

val t = new Tuple3(1, "hello", Console)

Фактический тип кортежа зависит от количества и содержащихся в нем элементов, а также от типов этих элементов. Таким образом, типом (99, "Luftballons") является Tuple2 [Int, String]. Тип ('u', 'r', "the", 1, 4, "me") - Tuple6 [Char, Char, String, Int, Int, String]

Кортежи имеют тип Tuple1, Tuple2, Tuple3 и т. Д. В настоящее время в Scala есть верхний предел 22, если вам нужно больше, тогда вы можете использовать коллекцию, а не кортеж. Для каждого типа TupleN, где 1 <= N <= 22, Scala определяет ряд методов доступа к элементам. Учитывая следующее определение -

val t = (4,3,2,1)

Чтобы получить доступ к элементам кортежа t, вы можете использовать метод t._1 для доступа к первому элементу, t._2 для доступа ко второму и так далее. Например, следующее выражение вычисляет сумму всех элементов t.

val sum = t._1 + t._2 + t._3 + t._4

Вы можете использовать Tuple для написания метода, который принимает List [Double] и возвращает счетчик, сумму и сумму квадратов, возвращаемых в трехэлементном Tuple, Tuple3 [Int, Double, Double]. Они также полезны для передачи списка значений данных в виде сообщений между участниками в параллельном программировании.

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

пример

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      val sum = t._1 + t._2 + t._3 + t._4
      println( "Sum of elements: "  + sum )
   }
}

Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.

Команды

\>scalac Demo.scala
\>scala Demo

Вывод

Sum of elements: 10

Итерировать по кортежу

Вы можете использовать Tuple.productIterator() для перебора всех элементов кортежа.

Попробуйте выполнить следующий пример программы для перебора кортежей.

пример

object Demo {
   def main(args: Array[String]) {
      val t = (4,3,2,1)
      t.productIterator.foreach{ i =>println("Value = " + i )}
   }
}

Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.

Команды

\>scalac Demo.scala
\>scala Demo

Вывод

Value = 4
Value = 3
Value = 2
Value = 1

Преобразование в строку

Вы можете использовать Tuple.toString()для объединения всех элементов кортежа в строку. Попробуйте преобразовать в строку из следующего примера программы.

пример

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple3(1, "hello", Console)
      println("Concatenated String: " + t.toString() )
   }
}

Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.

Команда

\>scalac Demo.scala
\>scala Demo

Вывод

Concatenated String: (1,hello,scala.Console$@281acd47)

Поменять местами элементы

Вы можете использовать Tuple.swap для замены элементов Tuple2.

Попробуйте использовать следующий пример программы, чтобы поменять местами элементы.

пример

object Demo {
   def main(args: Array[String]) {
      val t = new Tuple2("Scala", "hello")
      println("Swapped Tuple: " + t.swap )
   }
}

Сохраните указанную выше программу в Demo.scala. Следующие команды используются для компиляции и выполнения этой программы.

Команда

\>scalac Demo.scala
\>scala Demo

Вывод

Swapped tuple: (hello,Scala)