Swift. Словари. Базовые свойства и методы

From AsIsWiki
Revision as of 07:23, 22 March 2022 by Alex (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Назад · Оглавление · Дальше


Contents

Количество элементов словаря

var a = [1:"one", 2:"two", 3:"three"]

a.count  // 3

Определение пустого словаря

var a: [Int:String] = [:]

a.count    // 0
a.isEmpty  // true

Получение всех ключей или значений

var dic = ["RU":"Россия", "GB":"Великобритания", "US":"США"]

let keys = dic.keys      // Dictionary.Keys(["RU", "US", "GB"])

let values = dic.values  // Dictionary.Values(["Россия", "США", "Великобритания"])

type(of: keys)    // Dictionary<String, String>.Keys.Type
type(of: values)  // Dictionary<String, String>.Values.Type

Указанные типы соответствуют протоколу Collection,
и используются для доступа к ключам или значениям исходного словаря:

Set(keys)      // {"GB", "US", "RU"}
Array(keys)    // ["RU", "US", "GB"]

Set(values)    // {"Россия", "Великобритания", "США"}
Array(values)  // ["США", "Россия", "Великобритания"]

Вложенные типы данных

Dictionary<T1,T2>.Keys

Dictionary<T1,T2>.Values

Типы данных Keys и Values пишутся через точку после типа словаря.
Они реализованы внутри типа Dictionary<T1,T2> и не могут быть использованы вне его контекста:

var a: Values  // параметр такого типа создать нельзя,
               // Values существует только в контексте словаря

Значения типов Keys и Values не представляют интереса отдельно от родительского словаря.
В контексте словаря, данные типы возвращаются в виде обобщенной коллекции,
поскольку заранее неизвестно, в каком виде (Set или Array) они необходимы разработчику.

Пример

Проверка наличия фигуры на шахматной доске:

typealias Chessman = [String: (alpha:Character, num:Int)?]

var Chessmans: Chessman = [
    "Пешка": ("A", 2),
    "Ферзь": ("D", 1),
    "Ладья": nil,
]

var name = "Пешка1"

if let position = Chessmans[name] {  // проверяем наличие key
    
    if let pos = position {  // проверяем position на nil

        print("\(name) \(pos.alpha)\(pos.num)")
    } else {
        print("Фигура взята.")
    }
} else {
    print("Фигуры в словаре нет.")
}



Назад · Оглавление · Дальше

Personal tools
Namespaces

Variants
Actions
Navigation
Tools