2016-05-18 5 views
-4

は、私はこれらの2つの辞書を持っている:スウィフト辞書は自動的にソートされますか?

let test = ["Tomorrow": "Bla", "Month": "Bla"] 
print(test) // ["Tuesday": "Bla", "Month": "Bla"] 

let test1 = ["Tomorrow": "Bla", "One Month": "Bla"] 
print(test2) // ["One Month": "Bla", "Tuesday": "Bla"] 

それは私はキーワードを使用する場合は、「一つの」要素が前面に配置されることを思えます。どうして?

+7

辞書は注文されていませんので、あなたが見た順序は**全く意味がありません** .. – luk2302

+2

すでに何千回も質問されています。辞書は発注されません。 – Moritz

+1

@ luk2302と@EricD - あなたはもっと具体的でなければなりません。実際には、連想コンテナと連想コンテナがあります。これはSwiftの 'Dictionary'とObjective-Cの' NSDictionary'を順序付けられていないコンテナにする内部実装(ハッシュテーブルによる)です。 – CouchDeveloper

答えて

1

スウィフトのDictionaryは、ハッシュベースのデータ構造です。 - hashValueメソッドのバケット数を決定するために使用される

  • ハッシュキーとして使用されるオブジェクトの値は:特定の順序のメカニズムが整備されている場合を除き、ハッシュベースの構造内の項目の順序は、いくつかの要因に依存します項目
  • 構造のサイズ - 使用可能なバケットの数よりもはるかに大きくすることができるhashValueので、そのようなモジュロバケットカウントとして制限機構は、実際のバケット番号
  • 変形順序を決定するために使用される - これは、キーに衝突があった場合に関連します。後で配置される重複ハッシュ値を持つ要素は、異なるバケットに移動するか、または実際のバケットに関連付けられたリストに配置されます。たとえば、

あなたの第二の例では、辞書のサイズを変更する場合は、項目の順序が逆になります。これらのパラメータのいくつかは、あなたのコントロール外にあるので、

var test1 = [String:String]() // Use default initial capacity 
test1["Tomorrow"] = "Bla" 
test1["One Month"] = "Bla" 
print(test1) // ["One Month": "Bla", "Tomorrow": "Bla"] 

var test2 = [String:String](minimumCapacity: 11) // Use specific capacity 
test2["Tomorrow"] = "Bla" 
test2["One Month"] = "Bla" 
print(test2) // ["Tomorrow": "Bla", "One Month": "Bla"] 

項目の順序Dictionaryは、すべての実際的な目的のために任意であると考えることができる。

+0

説明をありがとう! –

関連する問題