Читайте также:
|
|
- А второй встроенный тип коллекции в Свифт словарь. В зависимости от вашего языка фоне, вы можете быть знакомы с концепцией этой коллекции, используя термин ассоциативный массив, или с картой, или по Hashtable, или, возможно, просто словарь. Swift, конечно, не единственный язык, который называет этот вид структуры данных словаря. Таким образом, ключевое отличие: в то время как базовую магазинов массива несколькими значениями, каждый из которых обращались с отсчетом от нуля последовательности целых чисел, словарь, вместо этого, хранит множество значений, каждое из которых доступны с помощью уникального ключа.
Таким образом, со словарем, мы храним наборы ключей и значений, каждое из них пару ключ / значение, и пар ключ / значение хранятся вместе. Этот ключ может быть строкой или ключ может быть целым числом. В самом деле, ключ может быть любой тип объекта. В отличие от массива, ключи в словаре не должны быть в любом определенном порядке, при условии, что они являются уникальными. Мы не можем иметь дубликаты ключей в словаре. Мы можем иметь одинаковые значения, если это имеет смысл для ваших данных, но мы не можем иметь дубликаты ключей.
Этот пример США, штат в качестве значений, получить с помощью своих государств сокращений в качестве ключей. Или мы могли бы иметь коды аэропортов в качестве ключей и соответствующие им города, как ценности, или идентификаторы продуктов в качестве ключей и продуктах, которые они представляют в качестве значений, но всегда ключей и значений пар, которые принадлежат друг другу. Так же, как с массивами, словари Swift сильно типизированных. Это не только один тип, но два, потому что по какой-либо один словарь, все ключи должны быть определенного типа, и все значения определенного типа, хотя тип клавиш и тип значений не должны то же самое.
Таким образом, мы могли бы, например, как на левой стороне здесь, мы могли бы иметь словарь, где все ключи целые числа, и все значения являются строками или словаре, где все ключи являются строками, и все значения Булевы или словаре где все ключи являются строками, и все значения также строки. Но то, что мы не можем иметь один словарь, в который ключ может быть Int или может быть строка. Это не допускается. К Xcode, у меня есть новый пустой площадка здесь. При создании словаря, как и при создании любой переменной или постоянной или массив, мы должны обеспечить какую-то информацию типа.
Мы либо использовать вывод типов и пусть Swift сделать это, если начальные значения очевидны, или мы должны были бы использовать явное аннотацию типа. Так, во-первых, сокращение способ сделать это: с помощью простой словарь, мы можем использовать словарь буквальное; очень похож на массив буквальном тем, что он использует квадратные скобки вокруг всего содержимого этого. Но то, что мы делаем это не только несколько отдельных значений, но несколько ключ и значение пар. Каждый ключ и значение пара есть двоеточие между ними, и они разделены запятой.
Так вот, то, что я делаю собираетесь использовать вывод типов. Все ключи и все допустимые значения, очевидно, строки, так что этот массив будет автоматически набирается как таковой. Я могу использовать Quick Look, чтобы видеть в этом словаре, что это четыре множества пар ключ / значение, и перейдите внутрь, чтобы увидеть, что каждый из них имеет две части. Тем не менее, если бы я хотел, чтобы объявить словарь без каких-либо начальных значений, так что нет ничего, чтобы сделать вывод, а затем, позже, загрузить его со значениями, возможно, каких-то внешних данных, я должен был бы объявить его с аннотации типа.
Для словаре, оно нуждается в двух типов: тип для ключей и тип значений. Это, как мы делаем это. Здесь я объявляю переменную словарь под названием продуктов, которые имеет типу. Мы используем квадратные скобки, INT, толстой кишки строк, словарей с целыми ключей и значений строк. Как с массивами, я могу использовать квадратные скобки, синтаксис индекс, если вы предпочитаете, чтобы получить доступ к любой паре один ключ / значение. Если я делаю Printline заявление, как это, в словаре с помощью ключа AZ - так что я печать все нашли с помощью этого ключа - я получу значение Аризона, хотя, если вы видите его здесь, в в панели результатов, то есть слово "дополнительный" вокруг него.
Мы войдем в опциями два фильма с этого момента, но, в общем, это потому, что в любое время я доступе словарь, я должен иметь в виду идею, что, может быть, этот ключ в словаре, и, может быть, это не так, и эта линия не имела бы никакого отношения к печати. Я могу также использовать этот же формат, используя синтаксис индекс либо изменить или добавить новое значение. Таким образом, в данном случае, я говорю, состояния, и я использую FL в качестве ключа. Это на самом деле не существуют в начальных значений, что я, предусмотренных для этого словаря. Таким образом, в данном случае, то, что будет происходить в том, потому что FL не существует, он будет добавлен в качестве новой пары ключ / значение.
Если все-таки существует, он попытался бы изменить значение. Словари у Свифта не имеют метод Append как массивы делают, просто потому, что с массивами, мы всегда можем гарантировать, что мы можем добавить новый элемент в конец массива. Мы просто дайте массив решить, что индекс, элемент. Но мы не давая словарь сказать нам, что индекс у нас есть; мы контроля ключ. Так со словарем, мы должны поддержать идею, что мы думаем, мы добавляем новую пару ключ / значение, но ключ может уже существовать в словаре с другим значением для него.
Теперь, используя этот синтаксис индекс здесь в коротком формате.Эквивалентный метод от руки этого является метод updateValue, так updateValue forKey. Так состояний название нашего словаря. Dot updateValue, мы передаем значение, а затем мы называем параметр для конкретного ключа. Если ключ существует, мы бы обновить соответствующее значение, но если это не так, он будет добавлен в качестве новой пары ключ / значение. Если бы я писал этот код в детской площадкой, этот призыв к updateValue, я ожидал увидеть ноль в панели результатов, потому что, то, что updateValue делает, попытка сначала загрузить и вернуть исходное значение для данного ключа, если таковой существовал в словаре прежде чем он обновляет это значение.
Ну, в моем случае, этот ключ NV не существует, поэтому мы получаем ноль вернулся, ноль у Свифта просто означает отсутствие значения. С другой стороны, если я пишу тот же код, делая updateValue, но где ключ на самом деле соответствует, то я получу существующее значение возвращается, прежде чем он обновляется. Таким образом, в данном случае, я пытаюсь изменить значение ключа Кентукки. Это действительно существует. Это было в оригинальной версии этого словаря здесь, на третьей линии, и я обновляю значение, но это будет первое возвращение в исходное значение для этого, который был просто слово Кентукки.
Давайте взглянем на текущее состояние этого словаря. Я просто написать его на своей собственной линии, иди сюда, а в Quick Look, нажмите глазное яблоко здесь, и мы видим, что это в значительной степени наборы ключей и значений, я бы ожидать увидеть прямо сейчас. Обратите внимание, что они не должны быть в любом определенном порядке здесь. Вы, возможно, создал вещи в алфавитном порядке, но способ, которым вещи были добавил, что не нужно быть таким образом. Ну, мы видели место, где мы используем это слово отсутствует, и это важное слово, когда мы работаем со словарями, потому что, говоря о нулю, самый простой способ, чтобы удалить пару ключ / значение из словаря для использовать синтаксис индекс, используя определенную клавишу, а затем установив его значение к нулю.
Таким образом, мы находим ключ DE и приравнивая к нулю. Теперь, главное, это не означает, что ключ ДЕ-прежнему существует в словаре, просто имеет нулевую ценность. Это позволит удалить пару весь ключ / значение из словаря. Затем, если бы я хотел, чтобы проверить, что я мог бы поставить слово этого государства после, используйте Quick Look, и мы не должны DE с пустой записи; это полностью исчез.Эквивалентный метод от руки для этого можно было бы назвать removeValueForKey.
Опять же, несмотря на название, это не просто удалить значение, он удаляет пару весь ключ / значение из словаря. Хотя, на этот раз также возвращает исходное значение, что, возможно, был в этой ключевой позиции, в данном случае, штат Калифорния. Теперь, как с массивами, мы можем использовать точечный countProperty, чтобы узнать количество пар ключ / значение в словаре. В этом случае, будет четыре состояния, оставшиеся после добавления и удаления некоторых некоторые другие. И, наконец, со словарями, мы также хотим, чтобы иметь возможность перебора него, чтобы пройти каждому пункту.
Мы также можем использовать удобный для в петлю, чтобы пройти через каждый пары ключ / значение в словаре. Хотя синтаксис имеет один дополнительный штрих, потому что элемент, который мы получаем каждый раз вокруг не просто один кусочек информации, она будет иметь пару. Это будет иметь как ключ и значение. Так вот, у меня есть это для цикла: для, отдельного элемента в государственной коллекции. Теперь, мы получили их пишется внутри скобки здесь, ключ, запятая, значение, но это на самом деле временные названия для каждого времени вокруг петли, и эти имена до нас.
Это будет ключевой, то значение, но я мог бы на самом деле так же легко, письменное расшифровать сокращение, запятая, FullName. Как бы то ни первый из них будет ключом; мы должны были бы использовать, что в теле цикла. Как бы то ни второй из них будет иметь значение. Так что это будет цикл через все пары ключ / значение в государствах. Тогда мы получили это четыре раза опцию здесь. Я мог бы нажать кнопку плюс, кнопку истории значений, чтобы увидеть результат. И это именно то, что я ожидал. Есть четыре государства оставили, AZ это сокращение от Аризоны, и так далее, и так далее.
Таким образом, мы итерации очень легко по всей словарь и получить как с ключа и значения. Это очень легко, легко читаемый формат. Однако эта простая на вид кусок синтаксиса здесь, где у нас есть два названия, заключенные в скобки, мы должны говорить об этом, потому что он представляет наш первый, но не последняя наша, встреча с концепцией нашли у Свифта, но не нашел во многих других языков программирования, и это идея "tupple", или кортежа... в следующий раз.
Дата добавления: 2015-08-20; просмотров: 138 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Using dictionaries | | | Understanding tuples |