Generic Structure

Set

An unordered collection of unique elements. 特有な要素いくつかからなるある順番付けられないコレクション。

Declaration 宣言

@frozen struct Set<Element> where Element : Hashable

Overview 概要

You use a set instead of an array when you need to test efficiently for membership and you aren’t concerned with the order of the elements in the collection, or when you need to ensure that each element appears only once in a collection. あなたが集合を配列の代わりに使うのは、あなたが帰属について能率的にテストする必要がありそしてあなたがコレクションの要素の順番に関心がない場合、または各要素がただ一度だけコレクション中に現れることをあなたが確実にする必要がある場合です。

You can create a set with any element type that conforms to the Hashable protocol. By default, most types in the standard library are hashable, including strings, numeric and Boolean types, enumeration cases without associated values, and even sets themselves. あなたは、Hashableプロトコルに準拠するあらゆる要素型を使って集合を作成することができます。初期状態で、標準ライブラリの中のほとんどの型はハッシュ化されています、文字列、数のおよびブールの型、関連値なしの列挙ケース節、そして集合それら自身さえも。

Swift makes it as easy to create a new set as to create a new array. Simply assign an array literal to a variable or constant with the Set type specified. Swiftは、新しい集合を作成することを新しい配列を作成するのと同じくらい簡単にします。単にある配列リテラルを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 Operations 集合演算

Sets provide a suite of mathematical set operations. For example, you can efficiently test a set for membership of an element or check its intersection with another set: 集合は、数学的な集合演算のひとそろいを提供します。例えば、あなたはある要素の帰属について能率的にテストすること、またはそれの別の集合との交差を調べることができます。

  • Use the contains(_:) method to test whether a set contains a specific element. contains(_:)メソッドを使って、ある集合が特定の要素を含むかどうかテストしてください。

  • Use the “equal to” operator (==) to test whether two sets contain the same elements. 「同等」演算子(==)を使って、2つの集合が同じ要素らを含むかどうかテストしてください。

  • Use the isSubset(of:) method to test whether a set contains all the elements of another set or sequence. isSubset(of:)メソッドを使って、ある集合が別の集合またはシーケンスに属する要素すべてを含むかどうかテストしてください。

  • Use the isSuperset(of:) method to test whether all elements of a set are contained in another set or sequence. isSuperset(of:)メソッドを使って、ある集合のすべての要素が別の集合またはシーケンスの中に含まれるかどうかテストしてください。

  • Use the isStrictSubset(of:) and isStrictSuperset(of:) methods to test whether a set is a subset or superset of, but not equal to, another set. isStrictSubset(of:)およびisStrictSuperset(of:)メソッドを使って、ある集合が別の集合の下位集合または上位集合である、しかし等しくはないものであるかどうかテストしてください。

  • Use the isDisjoint(with:) method to test whether a set has any elements in common with another set. isDisjoint(with:)メソッドを使って、ある集合が別の集合と共通の何らかの要素を持つかどうかテストしてください。

You can also combine, exclude, or subtract the elements of two sets: あなたはまた、結合、排他、または差引を行えます。

  • Use the union(_:) method to create a new set with the elements of a set and another set or sequence. union(_:)メソッドを使って、ある集合と別の集合またはシーケンスに属する要素で新しい集合を作成してください。

  • Use the intersection(_:) method to create a new set with only the elements common to a set and another set or sequence. intersection(_:)メソッドを使って、ある集合と別の集合またはシーケンスに共通の要素だけで新しい集合を作成してください。

  • Use the symmetricDifference(_:) method to create a new set with the elements that are in either a set or another set or sequence, but not in both. symmetricDifference(_:)メソッドを使って、ある集合または別の集合かシーケンスのどちらかにある、しかし両方にではない要素で新しい集合を作成してください。

  • Use the subtracting(_:) method to create a new set with the elements of a set that are not also in another set or sequence. subtracting(_:)メソッドを使って、別の集合またはシーケンスにはないある集合の要素で新しい集合を作成してください。

You can modify a set in place by using these methods’ mutating counterparts: formUnion(_:), formIntersection(_:), formSymmetricDifference(_:), and subtract(_:). あなたはある集合をその場で修正することがこれらのメソッドの変更を行う相当物:formUnion(_:)formIntersection(_:)formSymmetricDifference(_:)、そしてsubtract(_:)を使うことで可能です。

Set operations are not limited to use with other sets. Instead, you can perform set operations with another set, an array, or any other sequence type. 集合演算は、他の集合との使用に制限されません。それどころか、あなたは集合演算を他の集合、配列、またはあらゆる他のシーケンス型とで実行できます。


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 and Collection Operations シーケンスおよびコレクション演算

In addition to the Set type’s set operations, you can use any nonmutating sequence or collection methods with a 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"]

You can iterate through a set’s unordered elements with a for-in loop. あなたは、集合の持つ順序付けられない要素を始めから終わりまで反復することがfor-inで可能です。


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

Many sequence and collection operations return an array or a type-erasing collection wrapper instead of a set. To restore efficient set operations, create a new set from the result. 多くのシーケンスおよびコレクション演算は、集合ではなく、ある配列またはある型消去コレクションラッパーを返します。能率的な集合演算を取り戻すには、新しい集合を結果から作成してください。


let primesStrings = primes.map(String.init)
// 'primesStrings' is of type Array<String>
let primesStringsSet = Set(primes.map(String.init))
// 'primesStringsSet' is of type Set<String>

Bridging Between Set and NSSet SetとNSSetの間のブリッジ

You can bridge between Set and NSSet using the as operator. For bridging to be possible, the Element type of a set must be a class, an @objc protocol (a protocol imported from Objective-C or marked with the @objc attribute), or a type that bridges to a Foundation type. あなたはSetNSSetの間をas演算子を使ってブリッジできます。ブリッジが可能にされるには、集合のElement型は、クラス、@objcプロトコル(Objective-Cからインポートされるまたは@objc属性で印されるプロトコル)、またはあるFoundation型にブリッジする型でなければなりません。

Bridging from Set to NSSet always takes O(1) time and space. When the set’s Element type is neither a class nor an @objc protocol, any required bridging of elements occurs at the first access of each element, so the first operation that uses the contents of the set (for example, a membership test) can take O(n). SetからNSSetへのブリッジは、常にO(1)の時間と空間をとります。集合の持つElement型がクラスでも@objcプロトコルでもない場合、要素のブリッジに必要なあらゆることが要素それぞれの最初のアクセスで起こります、それで集合の内容を使う最初の演算(例えば、帰属テスト)は、O(n)をとります。

Bridging from NSSet to Set first calls the copy(with:) method (- copyWithZone: in Objective-C) on the set to get an immutable copy and then performs additional Swift bookkeeping work that takes O(1) time. For instances of NSSet that are already immutable, copy(with:) returns the same set in constant time; otherwise, the copying performance is unspecified. The instances of NSSet and Set share buffer using the same copy-on-write optimization that is used when two instances of Set share buffer. NSSetからSetへのブリッジは、最初にcopy(with:)メソッド(Objective-Cにおける- copyWithZone:)を集合上で呼び出すことで可変のコピーを取得して、それからO(1)時間をとる追加的なSwift簿記作業を実行します。元から不変であるNSSetのインスタンスに対しては、copy(with:)は同じ集合を定数時間で返します;そうでなければ、コピーすることの性能は不定です。NSSetSetのインスタンスは、Setの2つのインスタンスがバッファを共有するとき使われるのと、同じコピーオンライト最適化を使ってバッファを共有します。

Topics 話題

Creating a Set 集合の作成

In addition to using an array literal, you can also create a set using these initializers. 配列リテラルを使うことに加えて、あなたはまた集合をこれらのイニシャライザを使って作成できます。

Inspecting a Set 集合を調査する

Testing for Membership 帰属をテストする

Adding Elements 要素の追加

Removing Elements 要素の削除

Combining Sets 集合を結合する

Comparing Sets 集合を比較する

Accessing Individual Elements 個々の要素にアクセスする

Finding Elements 要素を見つける

Transforming a Set 集合を変形する

Iterating over a Set 集合のすべてに反復する

Performing Collection Operations コレクション演算の実行

Encoding and Decoding エンコーディングとデコーディング

Describing a Set あるSetの記述

Reference Types 参照型

Use bridged reference types when you need reference semantics or Foundation-specific behavior. ブリッジされた参照型を、あなたが参照意味論またはFoundation特有の挙動を必要とする場合に使ってください。

Supporting Types 支援を行う型

Infrequently Used Functionality 滅多に使われない機能性

Type Aliases 型エイリアス

Instance Properties 様々なインスタンスプロパティ

Relationships 関係

Conforms To 次に準拠

See Also 参照

Basic Collections 基本コレクション