1
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?

Swift-Collectionsを触ってみる

Posted at

モダンな配列処理が得意なswiftですが、公式パッケージであるSwift-Collectionsを導入することでさらにモダンでスマートなコードを書くことができます。
Swift Package Managerで導入できます。
https://github.com/apple/swift-collections/

各コレクションについて

順番に動作を見ていきます。

Deque

Dequeは、先頭にもデータを追加できる配列です。
reduceのような標準の配列の機能も使えるようです。

import Collections

var deque: Deque<Int> = [2, 3]
deque.prepend(1)
deque.append(4)
print(deque)
// [1, 2, 3, 4]

let reduce = deque.reduce(0, +)
print(reduce)
// 10

// [1, 2, 3, 4]

標準のArrayでもinsertで同様の実装ができますが、Dequeのprependで実装した方が高速に動作するようです。

OrderedSet

swiftのSetは順序が保持されませんが、OrderedSetなら元の順番を保持してくれます。
重複を削除したくて、かつ順序を変更したくないという場面は時々出てくるので使い道は多そうです。

import Collections

var array = [1, 2, 1, 3, 2, 4, 5, 4, 7]
let set = Set(array)
let orderedSet = OrderedSet(array)
print(set, orderedSet)
// [1, 5, 4, 2, 7, 3] [1, 2, 3, 4, 5, 7]

OrderedDictionary

まずswiftの辞書型についてですが、順序が保持されません。

import Collections

var dictionary: [String: Int] = [:]

dictionary["a"] = 1
dictionary["b"] = 2
dictionary["c"] = 3

print(dictionary)
// 実行する度に順序が変わる。
// ["b": 2, "a": 1, "c": 3]や、["c": 3, "a": 1, "b": 2]など

OrderedDictionaryなら順序も保持されます。

import Collections

var dictionary: OrderedDictionary<String, Int> = [:]

dictionary["a"] = 1
dictionary["b"] = 2
dictionary["c"] = 3

print(dictionary)

// ["a": 1, "b": 2, "c": 3]

インデックス指定で順序入れ替えるメソッドも用意されています。

import Collections

var dictionary: OrderedDictionary<String, Int> = [:]

dictionary["a"] = 1
dictionary["b"] = 2
dictionary["c"] = 3

dictionary.swapAt(1, 2)

print(dictionary)

// ["a": 1, "c": 3, "b": 2]

まとめ

汎用性の高いものというより、ピタッとハマればスマートにかけそうなものが多い印象です。
他にもまだ紹介しきれていないコレクションはたくさんありますので、興味のある方は調べてみると良いかもしれません。

1
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
1
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?