Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
swift中两个值的排序字典_Swift_Sorting_Dictionary - Fatal编程技术网

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]),
 ...
]