Sponsor Link
環境&対象
- macOS Monterery beta 5
- Xcode 13 beta5
- iOS 15 beta
Set と Array
Set と Array は、いずれも要素の集合を表します。
大きな特徴の1つに、順序を保持するかどうかがあります。Array は、要素を順序づけて保持しますが、Set は順序をつけません。
ユーザーへ要素を表示する時に、順序が大切なケースでは、Array を使って、データを保持することで、前回表示した時の順序を再現することができるので Array を使うのが便利です。
Set には、そのような順序づけは持たせられませんが、同一の要素は Set 内に 1つしか存在しないことが保証されます。
内部処理向けに使う時に、”同一要素は高々1つ” という条件は便利な時があるので、そのような前提をつけて処理したい時には、Set を使うのが便利です。
Set と Array の相互変換
Array, Set いずれも それぞれに便利なユースケースがあるので、相互にやりとりする必要が発生します。
Set から Array への変換
Array には、Sequence 型を受けっとって、Array を生成する initializer があります。
Apple のドキュメントは、こちら。
Set は Sequence 型でもありますので、以下のようにすると、Set が Array に変換されます.
import Foundation
let mySet:Set = [1,3,2,5]
let myArray = Array(mySet)
print(mySet)
print(myArray)
// print-out
[2, 3, 5, 1]
[2, 3, 5, 1]
Array から Set への変換
Set にも、Sequence 型を受けっとって、Set を生成する initializer があります。
Apple のドキュメントは、こちら。
Array も Sequence 型ですので、以下のようにすると、Array が Set に変換されます。
import Foundation
let myArray = [1,3,2,5]
let mySet = Set(myArray)
print(myArray)
print(mySet)
// print-out
[1, 3, 2, 5]
[5, 3, 1, 2]
Array は要素の順番を保持しているのと比較して、Set は、要素の順番を保持していないことがわかります。
Set から Array へ: 注意事項
Set には、同一要素は高々1つ という条件がありますので、同一要素を複数保持する Array を Set に変換すると内容が調整された Array が作成されます。
import Foundation
let myArray = [1,3,2,5,1]
let mySet = Set(myArray)
print(myArray)
print(mySet)
// print-out
[1, 3, 2, 5, 1]
[3, 5, 2, 1]
Array には、1 が2つありましたが、Set には、1 が1つのみ保持されていることがわかります。
まとめ:Array と Set の相互変換
- Array(mySet) で Array に変換される
- Set(myArray) で Set に変換される
- Set は 要素の順序を保持しないので、気をつける
- Array に複数の同一要素が入っている場合は、1つになった Set が作成される
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
Swift 学習におすすめの本
詳解Swift
Swift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
最新版を購入するのがおすすめです。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
Swift ポケットリファレンス
Swift を学んでも、プログラミング言語の文法を全て記憶しておくことは無理なので、ちょっとした文法の確認をするために、リファレンス本を手元に置いておくと便利です。
Swift4 までしか対応していないので、理解して参照する必要があります。
Sponsor Link