Swift-dictionaries

提供:Dev Guides
移動先:案内検索

Swift-辞書

Swift 4 *辞書*は、同じタイプの値の順序付けられていないリストを保存するために使用されます。 Swift 4は厳密なチェックを行うため、誤って誤ったタイプを辞書に入力することはありません。

Swift 4ディクショナリは、 key と呼ばれる一意の識別子を使用して、後で同じキーを介して参照および検索できる値を格納します。 配列内のアイテムとは異なり、*辞書*内のアイテムには順序が指定されていません。 識別子に基づいて値を検索する必要がある場合は、*辞書*を使用できます。

辞書キーは、整数または制限なしの文字列のいずれでもかまいませんが、辞書内で一意である必要があります。

作成したディクショナリを変数に割り当てると、常に可変になります。つまり、アイテムを追加、削除、または変更することで変更できます。 ただし、辞書を定数に割り当てた場合、その辞書は不変であり、そのサイズと内容は変更できません。

辞書を作成する

次の初期化構文を使用して、特定のタイプの空の辞書を作成できます-

var someDict = [KeyType: ValueType]()

次の単純な構文を使用して、キーがInt型になり、関連する値が文字列になる空の辞書を作成できます-

var someDict = [Int: String]()

これは、与えられた値のセットから辞書を作成する例です-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

シーケンスベースの初期化

Swift 4では、配列(キーと値のペア)から辞書を作成できます。

var cities = [“Delhi”,”Bangalore”,”Hyderabad”]

次の単純な構文を使用して、キーがInt型になり、関連する値が文字列になる空の辞書を作成できます-

var Distance = [2000,10, 620]

これは、与えられた値のセットから辞書を作成する例です-

let cityDistanceDict = Dictionary(uniqueKeysWithValues: zip(cities, Distance))

上記のコード行は、都市をキー、距離を値として辞書を作成します-

フィルタリング

Swift 4では、辞書から値をフィルタリングできます。

var closeCities = cityDistanceDict.filter { $0.value < 1000 }

上記のコードを実行すると、closeCities辞書が作成されます。

["Bangalore" : 10 , "Hyderabad" : 620]

辞書のグループ化

Swift 4では、辞書値のグループ化を作成できます。

var cities = ["Delhi","Bangalore","Hyderabad","Dehradun","Bihar"]

次の簡単な構文を使用して、最初のアルファベットに従って辞書の値をグループ化できます。

var GroupedCities = Dictionary(grouping: cities ) { $0.first! }

上記のコードの結果は次のようになります

["D" :["Delhi","Dehradun"], "B" : ["Bengaluru","Bihar"], "H" : ["Hyderabad"]]

辞書へのアクセス

あなたは、次のように辞書の名前の直後に角括弧内に取得したい値のキーを渡す添字構文を使用して、辞書から値を取得することができます-

var someVar = someDict[key]

辞書から値を作成、初期化、およびアクセスするには、次の例をチェックしましょう-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someVar = someDict[1]

print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Value of key = 1 is Optional("One")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

辞書の変更

  • updateValue(forKey:)*メソッドを使用して、既存の値を辞書の特定のキーに追加できます。 このメソッドは、ディクショナリの値タイプのオプションの値を返します。 これは簡単な例です-
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict.updateValue("New value of one", forKey: 1)
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

次の例に示すように、特定のキーに新しい値を割り当てることにより、辞書の既存の要素を変更できます-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var oldVal = someDict[1]
someDict[1] = "New value of one"
var someVar = someDict[1]

print( "Old value of key = 1 is \(oldVal)" )
print( "Value of key = 1 is \(someVar)" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Old value of key = 1 is Optional("One")
Value of key = 1 is Optional("New value of one")
Value of key = 2 is Optional("Two")
Value of key = 3 is Optional("Three")

キーと値のペアを削除

  • removeValueForKey()*メソッドを使用して、キーと値のペアを辞書から削除できます。 このメソッドは、キーと値のペアが存在する場合は削除し、削除した値を返します。値が存在しない場合はnilを返します。 これは簡単な例です-
var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var removedValue = someDict.removeValue(forKey: 2)

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

また、添え字構文を使用して、そのキーに nil の値を割り当てることにより、辞書からキーと値のペアを削除することもできます。 これは簡単な例です-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

someDict[2] = nil

print( "Value of key = 1 is \(someDict[1])" )
print( "Value of key = 2 is \(someDict[2])" )
print( "Value of key = 3 is \(someDict[3])" )

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Value of key = 1 is Optional("One")
Value of key = 2 is nil
Value of key = 3 is Optional("Three")

辞書の繰り返し

次の例に示すように、辞書のキーと値のペアのセット全体を反復処理するために、 for-in ループを使用できます-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

for (index, keyValue) in someDict.enumerated() {
   print("Dictionary key \(index) - Dictionary value \(keyValue)")
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Dictionary key 2 - Dictionary value Two
Dictionary key 3 - Dictionary value Three
Dictionary key 1 - Dictionary value One

以下の例に示すように、アイテムのインデックスとその(key、value)ペアを返す* enumerate()*関数を使用できます-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
for (key, value) in someDict.enumerated() {
   print("Dictionary key \(key) - Dictionary value \(value)")
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Dictionary key 0 - Dictionary value (key: 2, value: "Two")
Dictionary key 1 - Dictionary value (key: 3, value: "Three")
Dictionary key 2 - Dictionary value (key: 1, value: "One")

配列に変換

特定の辞書からキーと値のペアのリストを抽出して、キーと値の両方に対して個別の配列を作成できます。 ここに例があります-

var someDict:[Int:String] = [1:"One", 2:"Two", 3:"Three"]

let dictKeys = [Int](someDict.keys)
let dictValues = [String](someDict.values)

print("Print Dictionary Keys")

for (key) in dictKeys {
   print("\(key)")
}
print("Print Dictionary Values")

for (value) in dictValues {
   print("\(value)")
}

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Print Dictionary Keys
2
3
1
Print Dictionary Values
Two
Three
One

countプロパティ

以下に示すように、辞書の読み取り専用 count プロパティを使用して、辞書内のアイテムの数を調べることができます-

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]

print("Total items in someDict1 = \(someDict1.count)")
print("Total items in someDict2 = \(someDict2.count)")

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Total items in someDict1 = 3
Total items in someDict2 = 2

空のプロパティ

次のように、辞書の読み取り専用 empty プロパティを使用して、辞書が空かどうかを確認できます-

var someDict1:[Int:String] = [1:"One", 2:"Two", 3:"Three"]
var someDict2:[Int:String] = [4:"Four", 5:"Five"]
var someDict3:[Int:String] = [Int:String]()

print("someDict1 = \(someDict1.isEmpty)")
print("someDict2 = \(someDict2.isEmpty)")
print("someDict3 = \(someDict3.isEmpty)")

上記のコードをコンパイルして実行すると、次の結果が生成されます-

someDict1 = false
someDict2 = false
someDict3 = true