【Swift】辞書型(Dictionary)をキー値でソートさせる方法!sortedメソッドの使い方
この記事からわかること
- SwiftでDictionary(辞書型)をソートさせる方法
- sortedメソッドの使い方
- キー値を昇順/降順に並び替えるには?
- Set型をソートさせる方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
辞書型はforで回すと順番が保証されない?
Swiftで扱えるデータ型の中でもキー値と値でデータを管理できる辞書型は便利ですが、取り扱いには注意が必要です。
配列の場合はfor
文などで回した場合元の順序の通りに出力されます。しかし辞書型(Dictionary)の場合は元のデータの順序は保証されません。なので表示するたびに異なる結果になってしまいます。
let dic = ["2022":"令和4年","2021":"令和3年","2020":"令和2年"]
for item in dic {
print(item.key)
}
// 定義時とも異なり、実行されるたびに順序は異なる
// 2021
// 2020
// 2022
これを防ぐには定義した辞書型をソートさせます。
Swiftで辞書型(Dictionary)をソートさせる方法
Swiftで辞書型(Dictionary)をソートさせるにはsorted(by:)
メソッドを使用します。このメソッドを使用すると元の辞書型はそのままに新しくソートされた辞書型を返します。ちなみに配列の場合はsort
メソッドです。
第一引数のby
にクロージャ形式のソート条件を渡します。クロージャ内では$数値
で中の要素へアクセスが可能になっています。キー値を参照する場合は$0.key
、値を参照する場合は$0.value
と記述します。
キー値を昇順に並び替える
例えばキー値を昇順に並び替えるには以下のように$0.key < $1.key
とします。
let dic = ["2022":"令和4年","2021":"令和3年","2020":"令和2年"]
for item in dic.sorted(by: { $0.key < $1.key }) {
print(item.key)
}
// 2020
// 2021
// 2022
キー値でソートをかける場合は$0.key
と明示的に指定しなくても<
(比較演算子)を指定するだけでもOKです。
for item in dic.sorted(by: < ) {
print(item.key)
}
キー値を降順に並び替える
キー値を降順に並び替えるには以下のように$0.key > $1.key
とします。
let dic = ["2022":"令和4年","2021":"令和3年","2020":"令和2年"]
for item in dic.sorted(by: { $0.key > $1.key }) {
print(item.key)
}
// 2022
// 2021
// 2020
値を昇順に並び替える
値を昇順に並び替えるには以下のように$0.value < $1.value
とします。
let dic = ["2022":"令和4年","2021":"令和3年","2020":"令和2年"]
for item in dic.sorted(by: { $0.value < $1.value }) {
print(item.value)
}
// 令和2年
// 令和3年
// 令和4年
値を降順に並び替える
値を降順に並び替えるには以下のように$0.value > $1.value
とします。
let dic = ["2022":"令和4年","2021":"令和3年","2020":"令和2年"]
for item in dic.sorted(by: { $0.value > $1.value }) {
print(item.value)
}
// 令和4年
// 令和3年
// 令和2年
Set型にも使用可能
sortedメソッド
は配列には使用できませんが順序を保証しないSet
型にも使用できます。
let set = ["2022","2021","2020"]
for item in set.sorted(by: > ) {
print(item)
}
// 2022
// 2021
// 2020
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。