web-dev-qa-db-ja.com

Swiftの配列、セット、辞書の違い

私はSwift Langの初心者です。たくさんのチュートリアルを見てきましたが、明確ではありません。私の質問はArraySetDictionaryコレクションタイプ?

17
Magesh Pandian

さまざまなタイプの実際の違いは次のとおりです。

配列は効果的に順序付けられたリストであり、順序が重要な場合に情報のリストを格納するために使用されます。

たとえば、tableViewに表示されているソーシャルネットワークアプリの投稿は、配列に保存されます。

セットは、順序は重要ではないという意味で異なり、順序が重要でない場合に使用されます。

セットは、アイテムがセットにのみ表示されることを保証する必要がある場合に特に便利ですonce

辞書はkey、valueのペアを保存するために使用され、辞書のようにキーを使用して値を簡単に見つけたいときに使用されます。

たとえば、アイテムのリストと、これらのアイテムに関する詳細情報へのリンクを辞書に保存できます。

お役に立てれば :)

(詳細およびApple独自の定義を見つけるには、 https://developer.Apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/CollectionTypes.html でAppleのガイドを確認してください)

28
GJZ

詳細なドキュメントは Appleのガイド にあります。以下は、そこから抽出されたいくつかの簡単な定義です。

アレイ

配列は、同じタイプの値を順序付きリストに格納します。同じ値が異なる位置で複数回配列に現れることがあります。

セットする

セットは、同じタイプの個別の値を、定義された順序なしでコレクションに保存します。アイテムの順序が重要でない場合、またはアイテムが一度だけ表示されるようにする必要がある場合は、配列の代わりにセットを使用できます。

辞書

ディクショナリは、同じタイプのキーと同じタイプの値の間の関連付けを、順序が定義されていないコレクションに格納します。各値は一意のキーに関連付けられ、辞書内でその値の識別子として機能します。配列内のアイテムとは異なり、ディクショナリ内のアイテムには順序が指定されていません。特定のWordの定義を検索するために実際の辞書が使用されるのとほぼ同じ方法で、識別子に基づいて値を検索する必要がある場合に辞書を使用します。

9
Munahil

古いスレッドはまだパフォーマンスについて話す価値があります。

配列またはディクショナリ内のN要素を指定すると、要素にアクセスしたり、オブジェクトを追加または削除する際のパフォーマンスを考慮する価値があります。

配列

accessランダム要素は、最初または最後の要素にアクセスするのと同じコストがかかります。要素は連続して続き、直接アクセスされるためです。 1サイクルかかります。

挿入要素はコストがかかります。最初に追加すると、1サイクルかかります。中央に挿入すると、残りをシフトする必要があります。最悪の場合、Nサイクル(平均N/2サイクル)のコストがかかります。最後に追加して、アレイに十分なスペースがある場合、1サイクルかかります。そうしないと、アレイ全体がコピーされ、Nサイクルかかります。 これが、操作の開始時に配列に十分なスペースを割り当てることが重要な理由です

削除最初または最後から費用がかかります1.途中からシフト操作が必要です。平均してN/2です。

検索特定のプロパティを持つ要素は、N/2サイクルかかります。

そのため、巨大な配列には非常に注意してください。

辞書

ディクショナリは乱れていますが、ここではいくつかの利点があります。キーがハッシュされ、ハッシュテーブルに保存されるため、特定の操作には1サイクルかかります。例外は、検索指定されたプロパティを持つ要素のみです。最悪の場合、N/2サイクルかかります。賢い設計では、プロパティ値をディクショナリキーとして割り当てることができるため、内部に要素がいくつあってもルックアップに1サイクルかかります。

5
Teddy