web-dev-qa-db-ja.com

辞書と配列の違いは何ですか?

特にPLISTファイルを操作する場合、辞書と配列の違いは何ですか?どちらか一方を使用する利点は何ですか?ありがとう!

16
Jack Humphries

NSDictionaryNSArrayはどちらもコレクションクラスです。つまり、他のオブジェクトをグループ化します。

NSArrayは「順序付けられたコレクション」です。コレクション内のすべてのアイテムには整数のインデックスがあるため、アイテムには明示的な順序があります。コレクション内のアイテムの順序を入れ替えると、順序が異なるため、コレクションは「同じ」ではなくなります。オブジェクトがコレクションに複数回表示される場合があります。

NSSetは「順序付けられていないコレクション」です。すべてのアイテムがバッグに表示されます。順序は関係なく、オブジェクトはバッグ内に1回だけ存在できます。

NSDictionaryは「インデックス付きコレクション」です。コレクション内のすべてのアイテムにはキーがあり、そのキーを使用して取得できます。異なるキーが同じオブジェクトを指している可能性があるため、オブジェクトは複数回表示される場合がありますが、キーは1回しか表示できません。コンピュータサイエンスのバックグラウンドがある場合、辞書は「ハッシュテーブル」の形式でもあります。

PLISTを解析する場合、処理する主なタイプは配列と辞書です。 XcodeでPLISTを編集する場合、配列タイプとして設定すると、そのすべての子が「アイテム0、アイテム1、アイテム2 ...」としてリストされますが、ディクショナリタイプとして設定すると、子はキーと値のペアです。

異なるタイプの重要なユースケースの1つは次のとおりです。

多数の記事を含む雑誌アプリケーションを想像してみてください。記事の順序は重要であるため、各記事を配列に格納します。記事の順序を変更したい場合は、plistの配列の順序を変更します。

記事自体は、おそらく「TextFile」、「Background」、「ArticleType」などのキーを含む辞書で表すことができます。将来のある時点で辞書にさらに情報を追加する可能性があるため、辞書を使用します。key:valueメカニズムにより、コードが理解しやすくなります。

33
ikuramedia

配列は、オブジェクトのソートされたリストです。辞書には、キーと値のペアが格納されます。

例えば:

Array: obj1, obj2, ob3, ...

辞書:

{

    @"Name": @"Bob"

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber)

}

長所も短所もありません。これらは2つのデータ構造であり、必要なものを使用します。

4
JiaYow

主な違いは、それらの中でアクセスする方法です。

配列とディクショナリはどちらもコンテナであり、順次読み取ることができます(たとえば、配列はインデックスを使用して列挙でき、ディクショナリはキーを使用して列挙できます)。しかし、配列はオブジェクト間の順序を維持しますが、辞書はそうではありません。

さらに、辞書を使用すると、よりユーザーフレンドリーな方法(ニーモニックオブジェクト)で特定のキーを使用して特定のオブジェクトにアクセスすることができます。たとえば、辞書では、「テキスト」などの特定のキーに、NSStringなどの特定のオブジェクトが関連付けられていることが確実にわかっています。同じことがアレイにも当てはまりますが、いくつかの問題があります。たとえば、インデックス0に特定のオブジェクトNSStringがあることをどのように確認しますか?

あなたの質問について、そして私が知る限り(Xcode 4以降)、plistはルートオブジェクトとして辞書を持っています。詳細については、 how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4 を参照してください。

それが役に立てば幸い。

4
Lorenzo B

ディクショナリはキーを値(オブジェクト)に関連付け、アイテムの順序を保持しません。配列へのアクセスはインデックスによって行われます-順序は保持されます。 PLIstは、データ(キー、値のペア)を定義するためにXMLを使用する機能を追加します。

2
hburde