2017-06-06 3 views
-1

Ich mag würde Wörterbuch sortieren und sie in die gleiche speichern, aber es gibt Typkonflikt:Assign sortiert Wörterbuch auf das neue Wörterbuch

Wert kann nicht vom Typ zuordnen [(Int): (Doppel)], um die Geben Sie [Int: Double] ein.

dictionary = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in 
         if elem1.value < elem2.value { 
          return true 
         } else { 
          return false 
         } 
        }) 

Ich weiß, dass nach dem Sortieren es nicht mehr ein Wörterbuch sein wird.

let sorted = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in 
         if elem1.value < elem2.value { 
          return true 
         } else { 
          return false 
         } 
        }) 

Ich habe für-Schleife ein einfaches gemacht dachte sortet „Wörterbuch“ Werte wieder in das Wörterbuch zuweisen, aber es nicht als ein kopiert sortiert;/

var test = [Int : Double]() 

        for (key, value) in sorted { 
         test[key] = value 
        } 

Wie konnte Ich ordne das sortierte Wörterbuch dem Wörterbuch in der Reihenfolge zu, in der ich es sortiert habe?

EDID

Für jede Anmerkung ich fiel Stift eine deistance bekommen haben. Ich habe ein Wörterbuch gemacht, das eine key Anmerkungs-ID ist und value ist ein Abstand zwischen Anmerkung und fallen gelassenem Punkt. Ich brauche ein Wörterbuch, um die Datenquelle für die Zellansicht zu erkennen. Welche Annotation passt zu welcher Entfernung. So habe ich ein Wörterbuch mit [Int : Double] und in der Tabellenansicht Datenquelle:

let annotation = mapAnnotations[indexPath.row] 
var distance = dictionary[annotation.ID] 

Reasuming, Shell I sort mapAnnotations welche ein Array von Object über values innerhalb Wörterbuch mit Abständen, die durch annotationId makred werden?

Es wäre Array von object.ID Sortierung von Schlüsseln aus sorted

Vielen Dank im Voraus!

+7

Ein Wörterbuch ist eine * ungeordnete * Sammlung von Schlüssel/Wert-Paaren, die Sie nicht "sortieren" können. –

+0

@MartinR Ich brauche dieses Wörterbuch, das ein Schlüssel ist ID - muss nicht sortiert werden, aber Werte müssen sein. – yerpy

+0

Bitte aktualisieren Sie Ihre Frage mit einer klaren Beschreibung dessen, was Sie wirklich brauchen. –

Antwort

-2

Ich habe mein Problem gelöst.

Erstens:

Had Werte im Wörterbuch sortieren, indem Sie mit:

let sorted = dictionary.sorted(by: { (elem1: (key: Int, value: Double), elem2: (key: Int, value: Double)) -> Bool in 
         if elem1.value < elem2.value { 
          return true 
         } else { 
          return false 
         } 
        }) 

Dann nach, dass ich ein Array erstellt haben, das wird sich sorted Schlüssel sortiert Anmerkungen über haben.

0

Ein Wörterbuch selbst kann nicht sortiert werden das Konzept ist bedeutungslos, weil sie von Natur aus ungeordnet sind. Wenn Sie ein Wörterbuch verwenden, greifen Sie auf die Werte mit dem entsprechenden Schlüssel zu, damit die Reihenfolge nicht relevant ist. Obwohl Sie auf die Schlüssel und Werte als Eigenschaften zugreifen können, sind sie auch nicht sortiert.

Mit der sortierten Methode können Sie ein sortiertes Array des Dictionarys abrufen und ein Array mit Tupeln der Schlüssel und Werte zurückgeben, die nach Ihrer Bestimmung sortiert sind. In dem Beispiel würde [[key: Int, Wert: Double]] zurückgegeben. Sie können das also nicht dem ursprünglichen Wörterbuch zuordnen, da es kein Wörterbuch ist, sondern ein Array.

Der zusätzliche Code, der dann dem Wörterbuch zurückweist, entfernt die gesamte Sortierung, die Sie getan haben, weil das Konzept des Sortierens eines Wörterbuches bedeutungslos ist.

+0

Ja, darauf wollte ich eigentlich hinaus. Sie sortieren das Wörterbuch, in dem Sie ein sortiertes Array erstellen, nicht aus dem Dictionary und verwenden Sie dann das, um das endgültige Annotationsarray zu erstellen (obwohl ich die Annotationsarrayanforderung bis zu dem Bearbeiten der Frage nicht kannte). –

Verwandte Themen