2015-05-14 9 views
6

Per la documentazione intestazione Dictionary a Swift:Qual è lo scopo di un DictionaryIndex in Swift?

Una mappatura hash-based da Key a Value istanze. Anche una collezione di coppie chiave-valore senza ordini definiti.

Nota in particolare: no defined ordering.

Con questo in mente, sto avendo problemi comprendere appieno queste variabili computerizzata (ei relativi metodi che accettano questi tipi):

// The position of the first element in a non-empty dictionary. 
var startIndex: DictionaryIndex<Key, Value> { get } 

// The collection's "past the end" position. 
var endIndex: DictionaryIndex<Key, Value> { get } 

L ' "indice" Ecco un DictionaryIndex.

Tuttavia, la documentazione DictionaryIndex è un pò circolare qui:

utilizzato per accedere al coppie di valori-chiave in un'istanza di Dictionary<Key, Value>.

Qual è in realtà lo scopo di DictionaryIndex?

+2

Non sono sicuro, tuttavia "nessun ordine definito" non significa ordinamento casuale. 'NSDictionary' ha un ordine definito per le chiavi, è solo che Apple non documenta ciò che è ed è soggetto a modifiche in futuro. Le chiavi sono ordinate in qualsiasi ordine per rendere l'accesso al dizionario il più veloce (o nel caso di NSMutableDictionary, rendere più veloce la modifica del dizionario). –

+0

@AbhiBeckert, tu fai un punto interessante. Potrei vedere come ordinare per hash renderebbe possibile una ricerca binaria, ad esempio. Forse qualche altra magia dietro le quinte sta davvero accadendo? Ancora non sono sicuro di DictionaryIndex, ma grazie per l'input! :) –

+0

Si * può * iscrivere un dizionario con un DictionaryIndex (penso che sia ciò che intendeva Amit89 nella risposta che è stata cancellata proprio ora). Esempio: 'if let index = d.indexForKey (" chiave ") {let (k, v) = d [indice]; println ((k, v))} '. –

risposta

2

Sappiamo che uno Dictionary è composto da chiavi e valori. Ogni tasto è mappato su un valore basato su su alcuni calcoli interni. Qui il meccanismo utilizzato per questo scopo è Hashing.

Da wikipedia:

Una tabella hash utilizza una funzione di hash per calcolare un indice in un array di benne o fessure, da cui il valore corretto può essere trovato.

ritengono che una Dictionary è una tabella hash, che utilizza una funzione di hash e restituisce un oggetto di tipo DictionaryIndex - con cui è possibile accedere particolare oggetto direttamente nel Dizionario.

Correggimi se sbaglio!

+0

Penso che tu intenda "ogni chiave è mappata su un ** indice ** basato su alcuni calcoli interni", corretto? –

+0

Sì, penso di avere ciò che intendi-- insieme al commento di @AbhiBeckert, penso che questo sia il modo in cui funziona: 'DictionaryIndex' rappresenta l'indice sottostante per una data chiave nel' dizionario'. Ciò consente di effettuare ricerche binarie e altri trucchi, forse? :) –

+0

Nopes. Una chiave viene sempre mappata su un valore nel Dizionario basato su un valore hash (qui è 'DictionaryIndex'). – NightFury