【Swift】辞書型(Dictionary)をキー値でソートさせる方法!sortedメソッドの使い方

この記事からわかること

  • SwiftDictionary(辞書型)をソートさせる方法
  • 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

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index