0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Swift】OrderedDictionaryの導入手順から使用方法

Posted at

はじめに

Dictionaryを配列のようにIndex番号で取得する必要があり、OrderedDictionaryというライブラリを使用して実装したので、忘れないようにメモします。

OrderedDictionaryとは

OrderedDictionaryは、DictionaryをIndexで指定して取得できたり、順番をソートできるライブラリです。
Swift標準のDictionaryは、要素の順番が保証されていないため、配列のようにIndexを指定して要素を取得できません。

導入手順

OrderedDictionaryは標準のライブラリではないため、外部からインストールする必要があります。ここでは、CocoaPodsからのインストール手順を説明します。

手順1

podfileに以下を追加してくだい。

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とほとんど一緒でしたね!
今後も便利なライブラリをどんどん紹介していきたいと思います!

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?