文書   >   Foundation   >   Collections   >  Set
汎用構造体
Set
独特な要素の順序付けられていないコレクション。
宣言
概観
メンバーシップ (会員資格) を効率的にテストする必要があり、コレクション内の要素の順序に関係がない場合、または各要素がコレクション内に 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 との交差を確認したりできます。
- Set に特定の要素が含まれているかどうかをテストするには、contains(_:) メソッドを使用します。
- 2 つの Set に同じ要素が含まれているかどうかをテストするには、"等価"演算子 (==) を使用します。
- isSubset(of:) メソッドを使用して、Set に別のセットまたはシーケンスのすべての要素が含まれているかどうかをテストします。
- isSuperset(of:) メソッドを使用して、Set のすべての要素が別のセットまたはシーケンスに含まれているかどうかをテストします。
- isStrictSubset(of:) および isStrictSuperset(of:) メソッドを使用して、Set が別のセットのサブセットまたはスーパーセットであり、しかし等しくないかどうかをテストします。
- isDisjoint(with:) メソッドを使用して、Set に別の Set と共通の要素があるかどうかをテストします。
2 つの Set の要素を組み合わせたり、除外したり、減算したりすることもできます。
- union(_:) メソッドを使用して、Set の要素と別の Set またはシーケンスで新しい Set を作成します。
- intersection(_:) メソッドを使用して、ある Set と他の Set またはシーケンスに共通の要素のみを含む新しい Set を作成します。
- symmetricDifference(_:) メソッドを使用して、Set または別の Set またはシーケンスのいずれかに存在し、両方には存在しない要素を持つ新しい Set を作成します。
- subtracting(_:) メソッドを使用して、別の Set やシーケンスにも含まれていない Set の要素で新しい 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 演算子を使用して、Set と NSSet をブリッジすることができます。ブリッジを可能にするには、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 を一定時間で返します。それ以外の場合、コピーの性能は規定されていません。 NSSet と Set のインスタンスは、Set の 2 つのインスタンスがバッファを共有するときに使用されるのと同じコピーオンライト最適化を使用してバッファを共有します。
トピックス
Set の作成
配列リテラルを使用する事に加えて、これらのイニシャライザを使用して Set を作成することもできます。
空の Set を作成します。
少なくとも指定された数の要素に対して、事前に割り当てられたスペースを持つ空のセットを作成します。
項目の有限のシーケンスから新しい Set を作成します。
項目の有限のシーケンスから新しい Set を作成します。
Set の検査
Set が空かどうかを示すブール値。
Set 内の要素数。
新しい記憶領域を割り当てずに Set に含めることができる要素の総数。
メンバーシップの検査
func contains(Element) -> Bool
与えられた要素が Set 内に存在するかどうかを示すブール値を返します。
要素の追加
func insert(Element) -> (inserted: Bool, memberAfterInsert: Element)
指定された要素がまだ存在しない場合は、Set に挿入します。
func update(with: Element) -> Element?
与えられた要素を無条件で Set に挿入します。
func update<ConcreteElement>(with: ConcreteElement) -> ConcreteElement?
指定された数の要素を格納するのに十分なスペースを確保します。
要素の削除
func filter((Element) -> Bool) -> Set<Element>
与えられた述語を満たす Set の要素を含む新しい Set を返します。
func remove(Element) -> Element?
Set から指定された要素を削除します。
func remove<ConcreteElement>(ConcreteElement) -> ConcreteElement?
func removeFirst() -> Element
Set の最初の要素を削除します。
func remove(at: Set<Element>.Index) -> Element
Set の与えられたインデックスにある要素を削除します。
func removeAll(keepingCapacity: Bool)
Set からすべてのメンバーを削除します。
Set の組み合わせ
func union<S>(S) -> Set<Element>
この Set と与えられたシーケンスの両方の要素を持つ新しい Set を返します。
与えられたシーケンスの要素を Set に挿入します。
func intersection(Set<Element>) -> Set<Element>
この Set と与えられたシーケンスの両方に共通の要素を持つ新しい Set を返します。
func intersection<S>(S) -> Set<Element>
この Set と与えられたシーケンスの両方に共通の要素を持つ新しい Set を返します。
func formIntersection<S>(S)
与えられたシーケンスにも含まれていない Set の要素を削除します。
func symmetricDifference<S>(S) -> Set<Element>
この Set または与えられたシーケンスには含まれるが、両方には含まれない要素を持つ新しい Set を返します。
func formSymmetricDifference(Set<Element>)
与えられたシーケンスにも含まれる Set の要素を削除し、まだ Set に含まれていないシーケンスのメンバーを追加します。
func formSymmetricDifference<S>(S)
この Set または与えられた Set に含まれるが、両方には含まれない要素にこの Set を置き換えます。
func subtract(Set<Element>)
与えられた Set の要素をこの Set から削除します。
与えられたシーケンスの要素を Set から削除します。
func subtracting(Set<Element>) -> Set<Element>
与えられた Set には出現しない、この Set の要素を含む新しい Set を返します。
func subtracting<S>(S) -> Set<Element>
与えられたシーケンスには出現しない、この Set の要素を含む新しい Set を返します。
Set の比較
static func == (Set<Element>, Set<Element>) -> Bool
2 つの Set に等しい要素があるかどうかを示すブール値を返します。
static func != (Set<Element>, Set<Element>) -> Bool
2 つの値が等しくないかどうかを示すブール値を返します。
func isSubset(of: Set<Element>) -> Bool
この Set が与えられた Set のサブセットであるかどうかを示すブール値を返します。
func isSubset<S>(of: S) -> Bool
この Set が与えられたシーケンスのサブセットであるかどうかを示すブール値を返します。
func isStrictSubset(of: Set<Element>) -> Bool
この Set が与えられたシーケンスの厳密なサブセットであるかどうかを示すブール値を返します。
func isStrictSubset<S>(of: S) -> Bool
この Set が与えられたシーケンスの厳密なサブセットであるかどうかを示すブール値を返します。
func isSuperset(of: Set<Element>) -> Bool
この Set が与えられた Set のスーパーセットであるかどうかを示すブール値を返します。
func isSuperset<S>(of: S) -> Bool
この Set が与えられたシーケンスのスーパーセットであるかどうかを示すブール値を返します。
func isStrictSuperset(of: Set<Element>) -> Bool
この Set が与えられたシーケンスの厳密なスーパーセットであるかどうかを示すブール値を返します。
func isStrictSuperset<S>(of: S) -> Bool
この Set が与えられたシーケンスの厳密なスーパーセットであるかどうかを示すブール値を返します。
func isDisjoint(with: Set<Element>) -> Bool
この Set が与えられた Set とは共通したメンバーを持っていないかどうかを示すブール値を返します。
func isDisjoint<S>(with: S) -> Bool
この Set が与えられたシーケンスとは共通したメンバーを持っていないかどうかを示すブール値を返します。
個々の要素にアクセス
コレクションの最初の要素。
func randomElement() -> Element?
コレクションのランダムな要素を返します。
func randomElement<T>(using: inout T) -> Element?
乱数の発生源として与えられた発生器を使用して、コレクションのランダムな要素を返します。
要素の検索
subscript(Set<Element>.Index) -> Element
与えられた位置にあるメンバーにアクセスします。
func contains(where: (Element) -> Bool) -> Bool
与えられた述語 (predicate) を満たす要素がシーケンスに含まれているかどうかを示すブール値を返します。
func allSatisfy((Element) -> Bool) -> Bool
シーケンスのすべての要素が与えられた述語 (predicate) を満たすかどうかを示すブール値を返します。
func first(where: (Element) -> Bool) -> Element?
与えられた述語 (predicate) を満たすシーケンスの最初の要素を返します。
func firstIndex(of: Element) -> Set<Element>.Index?
Set 内の与えられた要素のインデックスを返すか、要素が Set のメンバーではない場合は nil を返します。
func firstIndex(where: (Element) -> Bool) -> Set<Element>.Index?
コレクションの要素が与えられた述語 (predicate) を満たす最初のインデックスを返します。
func index(of: Element) -> Set<Element>.Index?
指定された値がコレクション内で現れる最初のインデックスを返します。
Element が Equatable に準拠している場合利用可能です。
  廃止  
シーケンス内の最小の要素を返します。
Element が Comparable に準拠している場合利用可能です。
func min(by: (Element, Element) -> Bool) -> Element?
与えられた述語 (predicate) を要素間の比較として使用して、シーケンス内の最小の要素を返します。
シーケンス内の最大の要素を返します。
Element が Comparable に準拠している場合利用可能です。
func max(by: (Element, Element) -> Bool) -> Element?
与えられた述語 (predicate) を要素間の比較として使用して、シーケンス内の最大の要素を返します。
Set の変形
func map<T>((Element) -> T) -> [T]
与えられたクロージャをシーケンスの要素にマッピングした結果を含む配列を返します。
func compactMap<ElementOfResult>((Element) -> ElementOfResult?) -> [ElementOfResult]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果の nil 以外の結果を含む配列を返します。
func flatMap<SegmentOfResult>((Element) -> SegmentOfResult) -> [SegmentOfResult.Element]
このシーケンスの各要素を使用して、与えられた変換を呼び出した結果を連結したものを含む配列を返します。
func flatMap<ElementOfResult>((Element) -> ElementOfResult?) -> [ElementOfResult]
  廃止  
func reduce<Result>(Result, (Result, Element) -> Result) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
func reduce<Result>(into: Result, (inout Result, Element) -> ()) -> Result
与えられたクロージャを使用してシーケンスの要素を組み合わせた結果を返します。
並べ替えられたシーケンスの要素を返します。
Element が Comparable に準拠している場合利用可能です。
func sorted(by: (Element, Element) -> Bool) -> [Element]
与えられた述語 (predicate) を要素間の比較として使用して、並べ替えられたシーケンスの要素を返します。
func shuffled() -> [Element]
シーケンスの要素をシャッフルして返します。
func shuffled<T>(using: inout T) -> [Element]
乱数の発生源として与えられた発生器を使用してシャッフルされた、シーケンスの要素を返します。
var lazy: LazySequence<Set<Element>>
このシーケンスと同じ要素を含むが、map や filter などの一部の操作が遅延的に実装されているシーケンス。
Set の反復処理
func enumerated() -> EnumeratedSequence<Set<Element>>
(n、x) のペアのシーケンスを返します。ここで、n はゼロから始まる連続した整数を表し、x はシーケンスの要素を表します。
func forEach((Element) -> Void)
for-in ループと同じ順序で、シーケンス内の各要素に対して与えられたクロージャを呼び出します。
func makeIterator() -> Set<Element>.Iterator
Set のメンバーに対する反復因子を返します。
コレクション内の要素数以下の値。
Collection の操作の実行
Order Dependent Operations on Set (Set での順序依存作業)
Set の実装に従って、すべてのコレクションに共通の順序依存の操作を実行します。
コード化と復号化
このセットの要素を、キーのないコンテナ内の与えられたコード化器にコード化します。
Element が Encodable に準拠している場合利用可能です。
与えられた復号化器から復号することによって新しい Set を作成します。
Element が Decodable に準拠している場合利用可能です。
Set の記述
与えられたハッシャーにそれらを供給することによってこの値の本質的な要素をハッシュします。
Set の内容を表す文字列。
デバッグに適した Set の内容を表す文字列。
Set を反映するミラー。
参照型
参照の意味または Foundation 固有の動作が必要な場合は、ブリッジされた参照型を使用してください。
class NSSet
参照の意味を必要とする場合には、Set 定数の代わりに使用するための、静的な、順序付けされていない、一意のコレクションを表すオブジェクトです。
class NSMutableSet
参照の意味を必要とする場合には、Set 変数の代わりに使用するための、動的で、順序付けされていない、一意のコレクションを表すオブジェクトです。
サポートする型
Set 内の要素の位置。
Set<Element> のメンバーに対する繰り返し因子。
あまり使用されない機能
init(arrayLiteral: Element...)
与えられた配列リテラルの要素を含む Set を作成します。
func withContiguousStorageIfAvailable<R>((UnsafeBufferPointer<Element>) -> R) -> R?
body(p) を呼び出します。ここで、p はコレクションの連続した記憶領域へのポインタです。そのような記憶領域が存在しない場合は、それが最初に作成されます。コレクションが連続記憶形式の内部表現をサポートしていない場合、body は呼び出されず、nil が返されます。
型エイリアス
typealias Set.ArrayLiteralElement
配列リテラルの要素の型。
  Beta  
コレクションをサブスクリプトするのに有効なインデックスを昇順で表す型。
  Beta  
typealias Set.SelectionValue   Beta  
コレクションの要素の連続した部分範囲を表すシーケンス。
  Beta  
インスタンスプロパティ
ハッシュ値。
  Beta  
インスタンスメソッド
func deselect(Element)   Beta  
func isSelected(Element) -> Bool   Beta  
func select(Element)   Beta  
関連
以下への準拠
CustomDebugStringConvertible
CustomStringConvertible
Element が Decodable に準拠する時準拠します。
Element が Decodable に準拠する時準拠します。
ExpressibleByArrayLiteral
SelectionManager
SetAlgebra
以下も見よ
基本的な Collection
順序付けられたランダムアクセスのコレクション。
要素がキー値のペアであるコレクション。
この文書には、開発中の API または技術に関する予備的な情報が含まれています。この情報は変更される可能性があり、このドキュメントに従って実装されているソフトウェアは、最終的なオペレーティングシステムソフトウェアでテストする必要があります。
アップルのベータ版ソフトウェアの使い方についてもっと知る
トップへ
トップへ
トップへ
トップへ
トップへ