swift中两个值的排序字典
我有这样一本字典:swift中两个值的排序字典,swift,sorting,dictionary,Swift,Sorting,Dictionary,我有这样一本字典: ["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, "
["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]]
现在,我想为每个产品代码对这本词典进行排序。但我想按位置和页码排序。例如,我希望它运行position,然后运行page number
["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
方法进行此操作。我知道如何根据一个元素而不是两个元素进行排序。您可以按键和值对字典进行排序
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
扩展字典,其中值:可比较{
var sortedByValue:[(键,值)]{返回数组(dict).sorted{$0.1<$1.1}
}
扩展字典,其中键:可比较{
var sortedByKey:[(键,值)]{返回数组(dict).sorted{$0.0<$1.0}
}
[“b:2”,a:1,c:3]。sortedByKey//输出将是a:1,b:2,c:3
[“b”:2,“a”:1,“c”:3]。sortedByValue//输出将是a:1、b:2、c:3
词典是无序的集合,您无法对它们进行排序
但是,您可以使用返回有序元组列表的方法,其中每个元组表示字典中的键值条目:
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"]!
}
}
这里您可以。字典没有任何顺序。如果您的内部字典有静态键,那么它们应该是给定的
结构的实例。能满足我的需要。谢谢。稍加改进,首先考虑位置,然后PAG.M.M.MuZaHIDuliRISION,这会导致错误的订单。PO想先按页面,然后按位置对条目进行排序。@OzgurVatansever您能简要介绍一下逻辑吗?
[(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]),
...
]