Кортежи (tuple) в Swift

Домашняя работа к главе 6

Возможно, вы никогда не встречались в программировании с таким понятием, как кортежи, тем не менее, это одно из очень полезных функциональных средств, доступных в Swift. Кортежи, к примеру, могут использоваться для работы с координатами. Согласитесь, куда удобнее орудовать конструкцией (x, y, z), записанной в одну переменную, чем создавать по отдельной переменной для каждой оси координат.

Кортежи (Tuples) – очень важный и порой просто незаменимый элемент Swift, которого очень не хватает в некоторых других языках. Уделите должное внимание его изучению и тренировке работы с ним.

Задание 1

Какие из приведенных переменных являются кортежем?

var tupleOne = (200)
var tupleTwo = (200, 201)
var tupleThree: (Int, Int) = (1, 100)
Правильный ответ

  • tupleOne – переменная типа Int
  • tupleTwo и tupleThree – кортежи, они группируют несколько значений в одно

Задание 2

Определите тип данных для каждого кортежа.

var tupleOne = (1, 2, 3.14)
var tupleTwo = (5, 16.0, 4.11)
var tupleThree = (9, "Age")
var tupleFour = (tupleThree.1, "9")
var tupleFive = ("Century", 21)
Правильный ответ

  • tupleOne – тип (Int, Int, Double)
  • tupleTwo – тип (Int, Double, Double)
  • tupleThree – тип (Int, String)
  • tupleFour – тип (String, String)
  • tupleFive – тип (String, Int)

Задание 3

Какие из кортежей из задания 2 могут быть проинициализированы друг другу (т.е. значение одного присвоено другому)?

Правильный ответ

Никакие, т.к. у всех из них различный тип данных.

Задание 4

Что будет выведено на консоль?

var tupleAddress = ("Vologda", "Russia", "Earth")
tupleAddress.3 = "Mars"
var (city, country, planet) = tupleAddress
print(planet)
Правильный ответ

На консоль будет выведена ошибка, т.к. третий элемент кортежа имеет индекс 2, а в коде выше идет попытка обращения к несуществующему четвертому элементу с индексом 3.

Задание 5

Что будет выведено на консоль?

var tupleAboutMe = ("Mike", 37)
var (name, age) = tupleAboutMe
tupleAboutMe.0 = "Eridar"
print(name)
Правильный ответ

На консоль будет выведено Mike.

Значение в переменной не изменится при его изменении в кортеже, от куда оно было получено. Это связано с тем, что кортеж оперирует значимыми типами (value type), которые передаются не по ссылке, а непосредственно самим значением.

Задание 6

  1. Объявите константу и запишите в нее свое имя.
  2. Объявите переменную типа UInt8 и запишите в нее свой возраст.
  3. Объявите кортеж и явно определите его тип данных, как (name: String, age: Int).
  4. В первый элемент кортежа запишите значение константы с именем.
  5. Во второй элемент кортежа запишите значение из переменной с вашим возрастом.

Правильный ответ

let name = "Alex"
var age:UInt8 = 16
var tuple: (name: String, age: Int)
tuple.name = name
tuple.age = Int(age)


Доступ закрыт

Дополнительные 5 заданий доступны только подписчикам

Оформить доступ


5 Comments

  1. Андрей Доманов:

    Подскажите, задание 6, есть ли разница между моим выполнением и эталонным, как я понимаю в любом случае значения были записаны, хоть и на этапе создания кортежа:

    import Foundation

    let name = “Andrey”
    var age:UInt8 = 32

    var about:(name:String, age:Int) = (name, Int(age))

    В общем вопрос, есть ли разница и засчитывается подобное?

  2. Мishabux:

    В 11 задании вместо буферного кортежа сделал обмен в одну строку таким образом:
    (tuple, tuple2) = (tuple2, tuple)
    Код работает… Выходит можно создавать кортеж в кортеже?

  3. mr.lyubimov:

    Так же про 11ое задание:
    //мой кортеж
    var exp11 = (myMovi:”Show”,myCount:7)
    //пишем в константы
    let (a,b) = (exp11.0,exp11.1)
    //выводим в консоль
    print(“\(a) \(b)”)
    //задаем тип Man
    typealias Man = (String,Int)
    //задаем кортеж другого человека
    var exp11A: Man = (hisMovi:”HisShow”,hisNum:14)
    //обмен
    (exp11,exp11A) = (exp11A,exp11)
    /* после обмена именование параметров второго кортежа Exp11A удалилось, но значения
    но значения поменялись местами */

    это верно?

    • iliageine:

      mr.lyubimov:Нифига не правильно))) К сожалению я сделал как и Вы… и оборжался потом над собой, типа какой я прогер  классный, запомнил про смену переменных без буфера АХАХАХАХ В задании не просто так подсказка про буфер была, а так же штука в том чтобы элементы первого и второго картежа друг от друга минусовать. А в Вашем и моем случае мы минусуем не те данные что указаны в задании… Смешно и круто получилось! И точно запоминается такое!

Добавить комментарий