init()
init(minimumCapacity : Int)
init<S>(uniqueKeysWithValues : S)
init<S>(S, uniquingKeysWith : (Value, Value) -> Value)
init<S>(grouping: S, by: (S.Element) -> Key)
Availability
Technology
@frozen struct Dictionary<Key, Value> where Key : Hashable
A dictionary is a type of hash table, providing fast access to the entries it contains. Each entry in the table is identified using its key, which is a hashable type such as a string or number. You use that key to retrieve the corresponding value, which can be any object. In other languages, similar data types are known as hashes or associated arrays. 辞書はある種のハッシュテーブルであり、それが含んでいる登録項目への高速なアクセスを提供します。そのテーブル(表)の中の登録項目はそれのキーを使って特定され、そのキーはハッシュ化型、例えば文字列や数などです。あなたはこのキーを使ってその対応している値を取り出すことができ、その値はあらゆるオブジェクトであることができます。他の言語では、同じようなデータ型はハッシュまたは連想配列として知られます。
Create a new dictionary by using a dictionary literal. A dictionary literal is a comma-separated list of key-value pairs, in which a colon separates each key from its associated value, surrounded by square brackets. You can assign a dictionary literal to a variable or constant or pass it to a function that expects a dictionary. 新しい辞書を辞書リテラルを使って作成してください。辞書リテラルは、「キーと値」の組(キー値ペア)のコンマ区切りのリストで角括弧で囲まれています、このキー値ペアではコロンが各キーをそれの関連値から切り離します。あなたは、辞書リテラルを変数や定数に代入したり、それを辞書を予期する関数に渡したりできます。
Here’s how you would create a dictionary of HTTP response codes and their related messages: ここにあるのは、あなたがHTTP応答コードとそれらの関連メッセージの辞書を作成する方法です:
The response
variable is inferred to have type [Int: String]
. The Key
type of the dictionary is Int
, and the Value
type of the dictionary is String
.
response
変数は、型[Int: String]
を持つと推論されます。辞書のKey
型はInt
です、そして辞書のValue
型はString
です。
To create a dictionary with no key-value pairs, use an empty dictionary literal ([:]
).
キー値ペアを持たない辞書を作成するには、空の辞書リテラル([:]
)を使ってください。
Any type that conforms to the Hashable
protocol can be used as a dictionary’s Key
type, including all of Swift’s basic types. You can use your own custom types as dictionary keys by making them conform to the Hashable
protocol.
Swiftの基本的な型のすべてを含めて、Hashable
プロトコルに準拠するあらゆる型は、辞書のKey
型として使われることができます。あなたは、あなた独自のあつらえの型を辞書のキーとして使うことがそれらをHashable
プロトコルに準拠させることによって可能です。
The most common way to access values in a dictionary is to use a key as a subscript. Subscripting with a key takes the following form: 辞書の中の値にアクセスする最も普通の方法は、キーを添え字として使うことです。キーによる添え字は以下の形式をとります:
Subscripting a dictionary with a key returns an optional value, because a dictionary might not hold a value for the key that you use in the subscript. あるキーで辞書に添え字を使うことは、オプショナル値を返します、なぜなら辞書はあなたが添え字に使ったキーに対して値を保持しないかもしれないからです。
The next example uses key-based subscripting of the response
dictionary with two keys that exist in the dictionary and one that does not.
次の例は、キーに基づく添え字をresponse
辞書に使います、ですが2つのキーは辞書に存在し1つはそうでありません。
You can also update, modify, or remove keys and values from a dictionary using the key-based subscript. To add a new key-value pair, assign a value to a key that isn’t yet a part of the dictionary. あなたはまた、辞書のキーと値の更新、修正、または削除をキー基盤の添え字を使って可能です。新しいキー値ペアを加えるには、ある値を、まだ辞書の一部ではないキーに対して割り当ててください。
Update an existing value by assigning a new value to a key that already exists in the dictionary. If you assign nil
to an existing key, the key and its associated value are removed. The following example updates the value for the 404
code to be simply “Not found” and removes the key-value pair for the 500
code entirely.
すでに辞書に存在するキーに新しい値を割り当てることで、既存の値を更新してください。あなたがnil
を既存のキーに割り当てるならば、そのキーとそれの関連値は削除されます。以下の例は、404
コードの値を単純に「Not found」に更新して、500
コードに対するキー値ペアをすっかり削除します。
In a mutable Dictionary
instance, you can modify in place a value that you’ve accessed through a keyed subscript. The code sample below declares a dictionary called interesting
with string keys and values that are integer arrays, then sorts each array in-place in descending order.
可変のDictionary
インスタンスでは、あなたがキーによる添え字を通してアクセスしたある値をその場で修正できます。下のコード見本は、interesting
と呼ばれる辞書を文字列キーと整数配列である値で宣言します、それから各配列をその場で降順にソートします。
Every dictionary is an unordered collection of key-value pairs. You can iterate over a dictionary using a for
-in
loop, decomposing each key-value pair into the elements of a tuple.
すべての辞書は、キー値ペアの順番付けられないコレクションです。あなたは辞書全体にわたって反復適用していくことが、for
-in
ループを使うことで、各キー値ペアをタプルの要素へと分解しながら可能です。
The order of key-value pairs in a dictionary is stable between mutations but is otherwise unpredictable. If you need an ordered collection of key-value pairs and don’t need the fast key lookup that Dictionary
provides, see the Key
type for an alternative.
辞書中のキー値ペアの順番は各変化間は安定しています、しかしそれ以外では予測できません。あなたが順番付けられたキー値ペアのコレクションを必要とするそしてDictionary
が提供する高速な検索を必要としないならば、代わりのものとしてKey
型を見てください。
You can search a dictionary’s contents for a particular value using the contains(where:)
or first
methods supplied by default implementation. The following example checks to see if image
contains any paths in the "/glyphs"
directory:
あなたは、ある特定の値を求めて辞書の持つ内容を検索することが、省略時の実装で提供されるcontains(where:)
またはfirst
メソッドを使って可能です。以下の例は、image
が何らかのパスを"/glyphs"
ディレクトリの中に含むかどうかを調べるために検査します。
Note that in this example, image
is subscripted using a dictionary index. Unlike the key-based subscript, the index-based subscript returns the corresponding key-value pair as a non-optional tuple.
この例において、image
が辞書インデックスを使って添え字をすることに注意してください。キー基盤の添え字と違い、インデックス基盤の添え字は該当するキー値ペアを非オプショナルのタプルとして返します。
A dictionary’s indices stay valid across additions to the dictionary as long as the dictionary has enough capacity to store the added values without allocating more buffer. When a dictionary outgrows its buffer, existing indices may be invalidated without any notification. 辞書のインデックスは、その辞書への追加をまたいで有効なままです、加えられた値をもっとバッファを割り当てることなく格納するために辞書が十分な容量を持つ限りは。辞書がそれのバッファより大きくなる時、既存のインデックスは何の通知もなしに無効にされるでしょう。
When you know how many new values you’re adding to a dictionary, use the init(minimum
initializer to allocate the correct amount of buffer.
どのくらい多くの新しい値をあなたが辞書に加えることになるかあなたが知っている場合は、init(minimum
イニシャライザを使って正確な量のバッファを割り当ててください。
You can bridge between Dictionary
and NSDictionary
using the as
operator. For bridging to be possible, the Key
and Value
types of a dictionary must be classes, @objc
protocols, or types that bridge to Foundation types.
あなたは、Dictionary
とNSDictionary
の間をブリッジすることがas
演算子を使って行えます。ブリッジが可能にされるには、辞書のKey
とValue
型がクラス、@objc
プロトコル、またはFoundation型にブリッジする型でなければなりません。
Bridging from Dictionary
to NSDictionary
always takes O(1) time and space. When the dictionary’s Key
and Value
types are neither classes nor @objc
protocols, any required bridging of elements occurs at the first access of each element. For this reason, the first operation that uses the contents of the dictionary may take O(n).
Dictionary
からNSDictionary
へのブリッジは、常にO(1)時間と空間をとります。辞書のKey
とValue
型がクラスでも@objc
プロトコルでもない場合、それら要素のブリッジに必要とされるあらゆることが各要素の最初のアクセスで起こります。この理由のために、辞書の内容を使う最初の演算はO(n)をとるでしょう。
Bridging from NSDictionary
to Dictionary
first calls the copy(with:)
method (- copy
in Objective-C) on the dictionary to get an immutable copy and then performs additional Swift bookkeeping work that takes O(1) time. For instances of NSDictionary
that are already immutable, copy(with:)
usually returns the same dictionary in O(1) time; otherwise, the copying performance is unspecified. The instances of NSDictionary
and Dictionary
share buffer using the same copy-on-write optimization that is used when two instances of Dictionary
share buffer.
NSDictionary
からDictionary
へのブリッジは、最初にcopy(with:)
メソッド(Objective-Cでの- copy
)をその辞書上で呼び出して可変のコピーを取得して、それからO(1)時間を取る追加的なSwift簿記作業を実行します。すでに可変のNSDictionary
のインスタンスに対しては、copy(with:)
は通常同じ辞書をO(1)時間で返します;そうでなければ、このコピー性能は不定です。NSDictionary
とDictionary
インスタンスは、Dictionary
の2つのインスタンスがバッファを共有するとき使われるのと、同じコピーオンライト最適化を使ってバッファを共有します。
init()
init(minimumCapacity : Int)
init<S>(uniqueKeysWithValues : S)
init<S>(S, uniquingKeysWith : (Value, Value) -> Value)
init<S>(grouping: S, by: (S.Element) -> Key)
var isEmpty : Bool
var count: Int
var capacity: Int
subscript(Key) -> Value?
subscript(Key, default() -> Value) -> Value
func index(forKey : Key) -> Dictionary<Key, Value>.Index?
subscript(Dictionary<Key, Value>.Index) -> Dictionary<Key, Value>.Element
var keys: Dictionary<Key, Value>.Keys
var values: Dictionary<Key, Value>.Values
var first: (key: Key, value: Value)?
func randomElement () -> (key: Key, value: Value)?
func randomElement <T>(using: inout T) -> (key: Key, value: Value)?
func updateValue (Value, forKey : Key) -> Value?
func merge([Key : Value], uniquingKeysWith : (Value, Value) -> Value)
func merge<S>(S, uniquingKeysWith : (Value, Value) -> Value)
func merging([Key : Value], uniquingKeysWith : (Value, Value) -> Value) -> [Key : Value]
func merging<S>(S, uniquingKeysWith : (Value, Value) -> Value) -> [Key : Value]
func reserveCapacity (Int)
func filter((Dictionary<Key, Value>.Element) -> Bool) -> [Key : Value]
func removeValue (forKey : Key) -> Value?
func remove(at: Dictionary<Key, Value>.Index) -> Dictionary<Key, Value>.Element
func removeAll (keepingCapacity : Bool)
static func == ([Key : Value], [Key : Value]) -> Bool
Value
conforms to Equatable
.
Value
がEquatable
に準拠する時に利用可能です。
static func != (Dictionary<Key, Value>, Dictionary<Key, Value>) -> Bool
Value
conforms to Equatable
.
Value
がEquatable
に準拠する時に利用可能です。
func forEach (((key: Key, value: Value)) -> Void)
for
-in
loop.
指定されたクロージャをそのシーケンスの各要素上でfor
-in
ループと同じ順番で呼び出します。
func enumerated() -> EnumeratedSequence<Dictionary<Key, Value>>
var lazy: LazySequence<Dictionary<Key, Value>>
map
and filter
, are implemented lazily.
このシーケンスと同じ要素を含んでいるシーケンス、しかしそれの上で何らかの演算、例えばmap
やfilter
が遅延に実装されます。
func makeIterator () -> Dictionary<Key, Value>.Iterator
var underestimatedCount : Int
func contains(where: ((key: Key, value: Value)) -> Bool) -> Bool
func allSatisfy (((key: Key, value: Value)) -> Bool) -> Bool
func first(where: ((key: Key, value: Value)) -> Bool) -> (key: Key, value: Value)?
func firstIndex (where: ((key: Key, value: Value)) -> Bool) -> Index?
func min(by: ((key: Key, value: Value), (key: Key, value: Value)) -> Bool) -> (key: Key, value: Value)?
func max(by: ((key: Key, value: Value), (key: Key, value: Value)) -> Bool) -> (key: Key, value: Value)?
func mapValues <T>((Value) -> T) -> Dictionary<Key, T>
func reduce<Result>(Result, (Result, (key: Key, value: Value)) -> Result) -> Result
func reduce<Result>(into: Result, (inout Result, (key: Key, value: Value)) -> ()) -> Result
func map<T>(((key: Key, value: Value)) -> T) -> [T]
func compactMap <ElementOfResult>((( key: Key, value: Value)) -> ElementOfResult?) -> [ElementOfResult]
nil
results of calling the given transformation with each element of this sequence.
指定された変換をこのシーケンスの各要素で呼び出す結果で非-nil
のものを含んでいる配列を返します。
func compactMapValues <T>((Value) -> T?) -> Dictionary<Key, T>
nil
values as the result of transformation by the given closure.
与えられたクロージャによる変換の結果として非nil
を持つキー値ペアだけを含んでいる新しい辞書を返します。
func flatMap <SegmentOfResult>((( key: Key, value: Value)) -> SegmentOfResult) -> [SegmentOfResult.Element]
func flatMap <ElementOfResult>((( key: Key, value: Value)) -> ElementOfResult?) -> [ElementOfResult]
Deprecated
非推奨
func sorted(by: ((key: Key, value: Value), (key: Key, value: Value)) -> Bool) -> [(key: Key, value: Value)]
func shuffled() -> [(key: Key, value: Value)]
func shuffled<T>(using: inout T) -> [(key: Key, value: Value)]
Dictionary
.
すべてのコレクションに共通の順序依存演算を、Dictionary
に対して実装されたように実行します。
func encode(to: Encoder)
Key
conforms to Encodable
and Value
conforms to Encodable
.
Key
がEncodable
に準拠するそしてValue
がEncodable
に準拠する時に利用可能です。
init(from: Decoder)
Key
conforms to Decodable
and Value
conforms to Decodable
.
Key
がDecodable
に準拠するそしてValue
がDecodable
に準拠する時に利用可能です。
var description: String
var debugDescription : String
var customMirror : Mirror
func hash(into: inout Hasher)
Value
conforms to Hashable
.
Value
がHashable
に準拠する時に利用可能です。
init?(from: MLDataValue.DictionaryType)
Key
conforms to MLDataValueConvertible
and Value
conforms to MLDataValueConvertible
.
Key
がMLDataValueConvertible
に準拠するそしてValue
がMLDataValueConvertible
に準拠する時に利用可能です。
class NSDictionary
Dictionary
constant in cases that require reference semantics.
キー値ペアからなる静的なコレクションを表しているオブジェクト、参照意味論を必要とする場合にDictionary
定数の代わりに使うため。
class NSMutableDictionary
Dictionary
variable in cases that require reference semantics.
キー値ペアからなる動的なコレクションを表しているオブジェクト、参照意味論を必要とする場合にDictionary
変数の代わりに使うため。
struct Dictionary.Keys
struct Dictionary.Values
struct Dictionary.Index
typealias Dictionary.Indices
struct Dictionary.Iterator
Dictionary<Key, Value>
.
Dictionary<Key, Value>
のメンバーすべてを対象とするイテレータ。
typealias Dictionary.Element
typealias Dictionary.SubSequence
init?(from: MLDataValue)
Key
conforms to MLDataValueConvertible
and Value
conforms to MLDataValueConvertible
.
Key
がMLDataValueConvertible
に準拠するそしてValue
がMLDataValueConvertible
に準拠する時に利用可能です。
var dataValue : MLDataValue
Key
conforms to MLDataValueConvertible
and Value
conforms to MLDataValueConvertible
.
Key
がMLDataValueConvertible
に準拠するそしてValue
がMLDataValueConvertible
に準拠する時に利用可能です。
static var dataValueType : MLDataValue.ValueType
Key
conforms to MLDataValueConvertible
and Value
conforms to MLDataValueConvertible
.
Key
がMLDataValueConvertible
に準拠するそしてValue
がMLDataValueConvertible
に準拠する時に利用可能です。
init<S>(AttributeContainer, including: S.Type)
Key
is NSAttributedString
.
Key
and Value
is Any
.
Key
がNSAttributedString
.
Key
であるそしてValue
がAny
である時に利用可能です。
init<S>(AttributeContainer, including: KeyPath<AttributeScopes, S.Type>)
Key
is NSAttributedString
.
Key
and Value
is Any
.
Key
がNSAttributedString
.
Key
であるそしてValue
がAny
である時に利用可能です。
init(AttributeContainer)
Key
is NSAttributedString
.
Key
and Value
is Any
.
Key
がNSAttributedString
.
Key
であるそしてValue
がAny
である時に利用可能です。
init(dictionaryLiteral : (Key, Value)...)
var hashValue : Int
Value
conforms to Hashable
.
Value
がHashable
に準拠する時に利用可能です。
CVarArg
Collection
CustomDebugStringConvertible
CustomReflectable
CustomStringConvertible
Decodable
Key
conforms to Decodable
and Value
conforms to Decodable
.
Key
がDecodable
に準拠するそしてValue
がDecodable
に準拠する時に準拠します。
Encodable
Key
conforms to Encodable
and Value
conforms to Encodable
.
Key
がEncodable
に準拠するそしてValue
がEncodable
に準拠する時に準拠します。
Equatable
Value
conforms to Equatable
.
Value
がEquatable
に準拠する時に準拠します。
ExpressibleByDictionaryLiteral
Hashable
Value
conforms to Hashable
.
Value
がHashable
に準拠する時に準拠します。
MLDataValueConvertible
Key
conforms to MLDataValueConvertible
and Value
conforms to MLDataValueConvertible
.
Key
がMLDataValueConvertible
に準拠するそしてValue
がMLDataValueConvertible
に準拠する時に準拠します。
Sequence
struct Int
struct Double
struct String
struct Array