2016-02-05 27 views
7

Quindi, dire che ho un dizionario che assomiglia a questo:Come si trova un valore massimo in un dizionario Swift?

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201] 

Come dovrei programmazione trovare il valore più alto nel dizionario? Esiste un comando "data.max" o qualcosa del genere?

+2

'lasciare maxValue = data.sort {$ 0,1 <$ 1.1} // .last (0,0 8, .1 5.828)' –

+2

@LeoDabus tue opere risposta, ma 'sorta() 'Non è un modo efficiente per risolvere questo problema ci vuole' O (nlogn) 'e il' maxElement 'predefinito prende' O (n) '. –

+0

@VictorSigler La tua risposta sembra l'approccio corretto –

risposta

14
let maximum = data.reduce(0.0) { max($0, $1.1) } 

Solo un modo rapido utilizzando reduce.

o:

data.values.max() 

uscita:

print(maximum) // 5.828 
+0

'maxElement()' è stato rinominato in 'max()'. –

4

esiste una funzione API, denominata maxElement si può utilizzare molto semplice, che restituisce l'elemento di massima in self o nil se la sequenza è vuoto e richiede uno strict weak ordering come chiusura nel caso in cui si utilizza un dizionario. È possibile utilizzare come nel seguente esempio:

var data : [Float:Float] = [0:0,1:1,2:1.414,3:2.732,4:2,5:5.236,6:3.469,7:2.693,8:5.828,9:3.201] 
let element = data.maxElement { $0.1 < $1.1} // (.0 8, .1 5.828) 

e ottenere il massimo valore dai valori, ma è possibile modificare a piacere da usare sopra i tasti, tocca a voi.

Spero che questo ti aiuti.

1

Un dizionario Swift fornisce il massimo (dal metodo :). L'esempio da Apple è la seguente:

let hues = ["Heliotrope": 296, "Coral": 16, "Aquamarine": 156] 
let greatestHue = hues.max { a, b in a.value < b.value } 
print(greatestHue) 
// Prints "Optional(("Heliotrope", 296))" 
Problemi correlati