Коллекции 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)