2015-05-14 5 views
6

Per Header-Dokumentation auf Dictionary in Swift:Was ist der Zweck eines DictionaryIndex in Swift?

Eine Hash-basierte Abbildung von Key zu Value Instanzen. Auch eine Sammlung von Schlüssel-Wert-Paaren ohne definierte Reihenfolge.

Beachten Sie insbesondere - no defined ordering.

dies mit im Auge, ich bin diese berechneten Variablen voll Mühe, zu verstehen (und die damit verbundenen Methoden, die diese Art nehmen):

// 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 } 

Der „Index“ ist hier ein DictionaryIndex.

Allerdings ist die Dokumentation auf DictionaryIndex irgendwie Kreis hier:

verwendet, um die Schlüssel-Wert-Paare in einer Instanz von Dictionary<Key, Value> zuzugreifen.

Was ist eigentlich der Zweck von DictionaryIndex?

+2

Ich bin mir nicht sicher, aber "keine definierte Reihenfolge" bedeutet keine zufällige Reihenfolge. 'NSDictionary' hat eine definierte Reihenfolge für die Schlüssel, es ist nur, dass Apple nicht dokumentiert, was es ist und es in Zukunft ändern kann. Die Schlüssel werden in der Reihenfolge sortiert, in der der Wörterbuchzugriff am schnellsten ist (oder im Fall von NSMutableDictionary das Wörterbuch am schnellsten ändern). –

+0

@AbhiBeckert, Sie machen einen interessanten Punkt. Ich konnte sehen, wie die Sortierung nach Hash beispielsweise eine binäre Suche möglich machen würde. Vielleicht passiert tatsächlich eine andere Magie hinter den Kulissen? Bin immer noch nicht sicher über DictionaryIndex, aber danke für die Eingabe! :) –

+0

Sie * können * ein Wörterbuch mit einem DictionaryIndex subscript (ich denke, das ist, was Amit89 in der Antwort meinte, die gerade jetzt gelöscht wurde). Beispiel: 'if let index = d.IndexForKey (" Schlüssel ") {let (k, v) = d [index]; println ((k, v))} '. –

Antwort

2

Wir wissen, dass ein Dictionary besteht aus Schlüssel und Werte. Jeder Schlüssel wird einem Wertbasiert auf einigen internen Berechnungen zugeordnet. Hier ist der Mechanismus, der für diesen Zweck verwendet wird, Hashing.

Von wikipedia:

Eine Hash-Tabelle verwendet eine Hash-Funktion einen Index in ein Feld von Eimern oder Schlitzen zu berechnen, aus dem der korrekte Wert gefunden werden kann.

Bedenken Sie, dass ein Dictionary ist eine Hash-Tabelle, die einig Hash-Funktion verwendet, und gibt ein Objekt vom Typ DictionaryIndex - mit dem Sie bestimmtes Objekt direkt im Wörterbuch zugreifen können.

Korrigieren Sie mich, wenn ich falsch liege!

+0

Ich denke, Sie meinen, "jeder Schlüssel wird auf der Grundlage einiger interner Berechnungen auf einen ** Index ** abgebildet," richtig? –

+0

Ja, ich denke, ich verstehe, was du meinst-- zusammen mit dem Kommentar von @AbhiBeckert, ich denke, so funktioniert es: 'DictionaryIndex' repräsentiert den zugrunde liegenden Index für einen bestimmten Schlüssel im' Dictionary'. Dies erlaubt vielleicht binäre Lookups und andere Tricks? :) –

+0

Nopes. Ein Schlüssel wird immer einem Dictionary-Wert zugeordnet, der auf einem Hashwert basiert (hier ist es DictionaryIndex). – NightFury