2017-05-25 94 views
1

兩個值我有以下的字典,像這樣:排序字典上迅速

["FLBEY023": ["Position": 8, "Page": 1], 
"COSMAX826": ["Position": 6, "Page": 2], 
"TOVIC029": ["Position": 7, "Page": 1], 
"CGLYN188": ["Position": 2, "Page": 2], 
"TOORL002B": ["Position": 1, "Page": 2], 
"GSTOGFU096": ["Position": 6, "Page": 1], 
"COSNAI423": ["Position": 2, "Page": 1], 
"COSCOL681": ["Position": 3, "Page": 2], 
"TONIV170": ["Position": 4, "Page": 1], 
"SUMAL086A": ["Position": 7, "Page": 2], 
"PEIAM004": ["Position": 5, "Page": 1], 
"FOSCI012": ["Position": 1, "Page": 1], 
"FOSWI009": ["Position": 4, "Page": 2], 
"GSTODOV061": ["Position": 3, "Page": 1]] 

現在我想把這個詞典對每個產品代碼的排序。但我想在位置和頁面上進行分類。因此,例如,我想它運行的位置,然後頁碼例如

["FOSCI012": ["Position": 1, "Page": 1], 
"COSNAI423": ["Position": 2, "Page": 1], 
"GSTODOV061": ["Position": 3, "Page": 1], 
.... 
... 
... 
"TOORL002B": ["Position": 1, "Page": 2], 
"CGLYN188": ["Position": 2, "Page": 2], 
.. 

我怎麼會去這樣做使用Dictionary.sorted方法。我知道如何做到基於一個元素而不是兩個來排序。

+0

詞典沒有任何順序。 –

+0

鑑於您的內部字典具有靜態鍵,它們應該是給定'struct'的實例。 – Hamish

回答

3

字典排序字典是無序的集合,你不能對它們進行排序。

但是,您可以使用.sorted(by:)方法返回有序元組的列表,其中每一個代表在字典中的鍵值項:

dictionary.sorted { (lhs, rhs) -> Bool in 

    if (lhs.value["Page"]! == rhs.value["Page"]!) { 
    return lhs.value["Position"]! < rhs.value["Position"]! 
    } else { 
    return lhs.value["Page"]! < rhs.value["Page"]! 
    } 
} 

導致某事象下面這樣:

[(key: "FOSCI012", value: ["Position": 1, "Page": 1]), 
(key: "COSNAI423", value: ["Position": 2, "Page": 1]), 
... 
(key: "TOORL002B", value: ["Position": 1, "Page": 2]), 
(key: "CGLYN188", value: ["Position": 2, "Page": 2]), 
... 
] 

在這裏,您可以download the playground

+0

完美。爲我需要的東西工作。謝謝。 –

+0

有點改進,首先考慮定位然後頁面。 – iMuzahid

+0

@ Md.MuzahidulIslam這會導致錯誤的順序。 PO想要先按頁面對條目進行排序,然後按位置排序。 – ozgur

0

您可以通過鍵和值

extension Dictionary where Value:Comparable { 
    var sortedByValue:[(Key,Value)] {return Array(dict).sorted{$0.1 < $1.1}} 
} 

extension Dictionary where Key:Comparable { 
var sortedByKey:[(Key,Value)] {return Array(dict).sorted{$0.0 < $1.0}} 
} 

["b":2,"a":1,"c":3].sortedByKey// output will be a:1, b:2, c:3 
["b":2,"a":1,"c":3].sortedByValue//output will be a:1, b:2, c:3