文書   >   Foundation   >   Collections   >  Set


汎用構造体


Set


独特な要素の順序付けられていないコレクション。





宣言


struct Set<Element> where Element : Hashable


概観


メンバーシップ (会員資格) を効率的にテストする必要があり、コレクション内の要素の順序に関係がない場合、または各要素がコレクション内に 1 回だけ現れることを保証する必要がある場合は、配列の代わりに set を使用します。


Hashable プロトコルに準拠した任意の要素型で Set を作成できます。デフォルトでは、標準ライブラリ内のほとんどの型は、文字列、数値、ブール型、値が関連付けられていない列挙型、さらには Set 自体を含み、ハッシュ可能です。


Swift を使用すると、新しい配列を作成するのと同じくらい簡単に新しい Set を作成できます。Set 型を指定して、配列リテラルを変数または定数に代入するだけです。


let ingredients: Set = ["cocoa beans", "sugar", "cocoa butter", "salt"]
if ingredients.contains("sugar") {
    print("No thanks, too sweet.")
}
// Prints "No thanks, too sweet."


Set の操作


Set は一連の数学的な Set の操作を提供します。たとえば、要素のメンバーシップ (会員資格) について Set を効率的にテストしたり、別の Set との交差を確認したりできます。


2 つの Set の要素を組み合わせたり、除外したり、減算したりすることもできます。


formUnion(_:)formIntersection(_:)formSymmetricDifference(_:) 、および subtract(_:) のように、これらのメソッドの対応する変更方法を使用して、Set をその場で変更できます。


Set の操作は他の Set での使用にも限定されません。代わりに、別のSet、配列、または他の任意のシーケンス型を使用して Set の演算を実行できます。


var primes: Set = [2, 3, 5, 7]

// Tests whether primes is a subset of a Range<Int>
print(primes.isSubset(of: 0..<10))
// Prints "true"

// Performs an intersection with an Array<Int>
let favoriteNumbers = [5, 7, 15, 21]
print(primes.intersection(favoriteNumbers))
// Prints "[5, 7]"


Sequence と Collection の操作


Set 型の Set の操作に加えて、Set では全ての不可変シーケンスまたはコレクションのメソッドを使用できます。


if primes.isEmpty {
    print("No primes!")
} else {
    print("We have \(primes.count) primes.")
}
// Prints "We have 4 primes."

let primesSum = primes.reduce(0, +)
// 'primesSum' == 17

let primeStrings = primes.sorted().map(String.init)
// 'primeStrings' == ["2", "3", "5", "7"]


for-in ループを使用して、セットの順序付けされていない要素を繰り返し処理することができます。


for number in primes {
    print(number)
}
// Prints "5"
// Prints "7"
// Prints "2"
// Prints "3"


シーケンスおよびコレクションの多くの操作は、Set の代わりに配列または型消去コレクションラッパーを返します。効率的な Set の操作を復元するには、結果から新しい Set を作成します。


let morePrimes = primes.union([11, 13, 17, 19])

let laterPrimes = morePrimes.filter { $0 > 10 }
// 'laterPrimes' is of type Array<Int>

let laterPrimesSet = Set(morePrimes.filter { $0 > 10 })
// 'laterPrimesSet' is of type Set<Int>


Set と NSSet 間のブリッジ


as 演算子を使用して、SetNSSet をブリッジすることができます。ブリッジを可能にするには、Set の Element 型はクラスでなければならず、@objc プロトコル (Objective-C からインポートされた、または @objc 属性でマークされたプロトコル)、または Foundation 型にブリッジする型であなければなりません。


Set から NSSet へのブリッジは常に O(1) の時間と空間を要します。Set の Element 型がクラスでも @objc プロトコルでもない場合は、各要素の最初のアクセス時に必要な要素のブリッジが行われるため、Set の内容を使用する最初の操作 (例えば、メンバーシップのテストなど) は O(n) になることがあります。


NSSet から Set へのブリッジは、最初に Set 上で copy(with:) メソッド (Objective-C では - copyWithZone:) を呼び出して不変コピーを取得し、次に O(1) 時間のかかる追加の Swift の作業を実行します。すでに不変の NSSet のインスタンスでは、copy(with:) は同じ Set を一定時間で返します。それ以外の場合、コピーの性能は規定されていません。 NSSetSet のインスタンスは、Set の 2 つのインスタンスがバッファを共有するときに使用されるのと同じコピーオンライト最適化を使用してバッファを共有します。


トピックス





Set の作成





Set の検査





メンバーシップの検査





要素の追加





要素の削除





Set の組み合わせ





Set の比較





個々の要素にアクセス





要素の検索





Set の変形





Set の反復処理





Collection の操作の実行





コード化と復号化





Set の記述





参照型





サポートする型





あまり使用されない機能





型エイリアス





インスタンスプロパティ





インスタンスメソッド



関連





以下への準拠


以下も見よ




基本的な Collection





Beta ソフトウエア

この文書には、開発中の API または技術に関する予備的な情報が含まれています。この情報は変更される可能性があり、このドキュメントに従って実装されているソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。

アップルのベータ版ソフトウェアの使い方についてもっと知る














トップへ












トップへ












トップへ












トップへ












トップへ
目次
Xcode 10 の新機能

  • 言語:Swift
  • SDK
  • XCode 6.3+
  • 宣言
  • 概観
  • トピックス
  • 関連
  • 以下も見よ












  • トップへ












    トップへ












    トップへ












    トップへ












    トップへ