はじめに
Dictionaryを配列のようにIndex番号で取得する必要があり、OrderedDictionaryというライブラリを使用して実装したので、忘れないようにメモします。
OrderedDictionaryとは
OrderedDictionaryは、DictionaryをIndexで指定して取得できたり、順番をソートできるライブラリです。
Swift標準のDictionaryは、要素の順番が保証されていないため、配列のようにIndexを指定して要素を取得できません。
導入手順
OrderedDictionaryは標準のライブラリではないため、外部からインストールする必要があります。ここでは、CocoaPodsからのインストール手順を説明します。
手順1
podfileに以下を追加してくだい。
pod 'OrderedCollections'
手順2
ターミナルを開き自分のプロジェクトがあるディレクトリまで移動します。
その後、ターミナルで以下を実行してください。
pod update
これで、ライブラリの導入は完了です。
使用方法
続いて、使用方法を解説します。
Dictionaryとの違いを比較しながら違いを見ていきましょう!
定義
まず、OrderedCollections
をインポートします。
import OrderedCollections // 追加
// Dictionary
var fruits_1: Dictionary<Int, String> = [
1 : "りんご",
2 : "ぶどう",
3 : "なし",
4 : "もも"
]
// OrderedDictionary
var fruits_2: OrderedDictionary<Int, String> = [
1 : "りんご",
2 : "ぶどう",
3 : "なし",
4 : "もも"
]
print(fruits_1)
// [3: "なし", 4: "もも", 1: "りんご", 2: "ぶどう"]
print(fruits_2)
// [1: りんご, 2: ぶどう, 3: なし, 4: もも]
/* おまけ
-------------------------------- */
// 空で定義も可能
fruits_3: OrderedDictionary<Int, String> = [:]
// 構造体を使用しての定義も可能
struct Features {
var price: Int
var color: String
}
fruits_4: OrderedDictionary<String, Features> = [
"りんご" : Features(price: 100, color: "red"),
"ぶどう" : Features(price: 300, color: "purple"),
"なし" : Features(price: 200, color: "green"),
"もも" : Features(price: 400, color: "pink"),
]
File not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a
もし上のようなエラーが出た場合は、以下の記事を参考にして、Minimum Deploymentsのバージョンをあげればエラーは消えると思います。
追加方法
fruits_1[5] = "パイナップル"
fruits_2[5] = "パイナップル"
print(fruits_1)
// [3: "なし", 4: "もも", 1: "りんご", 5: "パイナップル", 2: "ぶどう"]
print(fruits_2)
// [1: りんご, 2: ぶどう, 3: なし, 4: もも, 5: パイナップル]
削除方法
fruits_1.removeValue(forKey: 1)
fruits_2.removeValue(forKey: 1)
print(fruits_1)
// [3: "なし", 4: "もも", 5: "パイナップル", 2: "ぶどう"]
print(fruits_2)
// [2: ぶどう, 3: なし, 4: もも, 5: パイナップル]
順序入れ替え
var fruits_5: OrderedDictionary<Int, String> = [
3 : "なし",
1 : "りんご",
4 : "もも",
2 : "ぶどう"
]
// ソート
fruits_5.sort()
print(fruits_5) // [1: りんご, 2: ぶどう, 3: なし, 4: もも]
// シャッフル
fruits_5.shuffle() // [4: もも, 3: なし, 1: りんご, 2: ぶどう]
print(fruits_5)
// スワップ
fruits_5.swapAt(0, 3)
print(fruits_5) // [2: ぶどう, 3: なし, 1: りんご, 4: もも]
取得方法
// Keyでアクセス
print(fruits_1[2]) // Optional("ぶどう")
print(fruits_2[2]) // Optional("ぶどう")
// Indexを指定
print(fruits_1.elements[0].value)
// Dictionaryは、Indexで取得できないため以下のエラーがでる
// Value of type 'Dictionary<Int, String>' has no member 'elements'
print(fruits_2.elements[0]) // (key: 1, value: "りんご")
print(fruits_2.elements[0].value) // りんご
// タイプの確認
print(type(of: fruits_1)) // Dictionary<Int, String>
print(type(of: fruits_2)) // OrderedDictionary<Int, String>
おわりに
使い方は、標準のDictionaryとほとんど一緒でしたね!
今後も便利なライブラリをどんどん紹介していきたいと思います!