В Scala, кортеж (Тuple) - это контейнер содержащий упорядоченный набор элементов различного типа. Кортежи неизменяемы.
Кортежи могут пригодиться, когда нам нужно вернуть сразу несколько значений из функции.
Кортеж может быть создан как:
val ingredient = ("Sugar", 25)
Такая запись создает кортеж, содержащий пару элементов String
и Int
.
Выводимый тип ingredient
- это (String, Int)
.
Доступ к элементам
Один из способов доступа к элементам кортежа — по их позиции.
tuple._n
дает n-ый элемент (столько, сколько существует элементов).
println(ingredient._1) // Sugar
println(ingredient._2) // 25
Один из способов доступа к элементам кортежа — по их позиции.
Доступ к отдельным элементам осуществляется с помощью tuple(0)
, tuple(1)
и так далее.
println(ingredient(0)) // Sugar
println(ingredient(1)) // 25
Сопоставление с образцом для кортежей
Кортеж также можно распаковать с помощью сопоставления с образцом:
val (name, quantity) = ingredient
println(name) // Sugar
println(quantity) // 25
Здесь выводимый тип name
- String
и выводимый тип quantity
- Int
.
Вот еще один пример сопоставления с образцом кортежа:
val planets =
List(("Mercury", 57.9), ("Venus", 108.2), ("Earth", 149.6),
("Mars", 227.9), ("Jupiter", 778.3))
planets.foreach {
case ("Earth", distance) =>
println(s"Our planet is $distance million kilometers from the sun")
case _ =>
}
Или, в for-comprehension:
val numPairs = List((2, 5), (3, -7), (20, 56))
for ((a, b) <- numPairs) {
println(a * b)
}
val numPairs = List((2, 5), (3, -7), (20, 56))
for (a, b) <- numPairs do
println(a * b)
Кортежи и кейс-классы
Иногда бывает трудно выбирать между кортежами и кейс-классами.
Кейс-классы содержат именованные элементы. Имена могут улучшить читаемость некоторых типов кода.
В приведенном выше примере мы могли бы определить планеты, как case class Planet(name: String, distance: Double)
,
а не использовать кортежи.
Дополнительные ресурсы
- Дополнительная информация о кортежах - в книге Scala Book
Contributors to this page:
Contents
- Введение
- Основы
- Единобразие типов
- Классы
- Значения Параметров По умолчанию
- Именованные Аргументы
- Трейты
- Кортежи
- Композиция классов с трейтами
- Функции Высшего Порядка
- Вложенные Методы
- Множественные списки параметров (Каррирование)
- Классы Образцы
- Сопоставление с примером
- Объекты Одиночки
- Регулярные Выражения
- Объект Экстрактор
- Сложные for-выражения
- Обобщенные Классы
- Вариантность
- Верхнее Ограничение Типа
- Нижнее Ограничение Типа
- Внутренние классы
- Члены Абстрактного Типа
- Составные Типы
- Самоописываемые типы
- Контекстные параметры, также известные, как неявные параметры
- Неявные Преобразования
- Полиморфные методы
- Выведение Типа
- Операторы
- Вызов по имени
- Аннотации
- Пакеты и Импорт
- Объекты Пакета