Ios 按值对swift字典排序,然后按键对具有相同值的键的最终结果排序

Ios 按值对swift字典排序,然后按键对具有相同值的键的最终结果排序,ios,swift,sorting,dictionary,Ios,Swift,Sorting,Dictionary,我有一个[myStruct:Int]字典,我想先按值排序,然后对具有相同值的键,我想按“myStruct”中的字符串属性“item”排序 struct myStruct { var item: String! var amount: Int! } 我试图实现这个建议,在我看来这是一个很棒的解决方案,但我无法为我拥有的自定义结构实现它 有什么帮助吗?要实现带有排序闭包的引用解决方案,您应该为您的结构定义相应的比较运算符 func < (lhs: myStruct, rhs:

我有一个[myStruct:Int]字典,我想先按值排序,然后对具有相同值的键,我想按“myStruct”中的字符串属性“item”排序

struct myStruct {
    var item: String!
    var amount: Int!
}
我试图实现这个建议,在我看来这是一个很棒的解决方案,但我无法为我拥有的自定义结构实现它


有什么帮助吗?

要实现带有排序闭包的引用解决方案,您应该为您的结构定义相应的比较运算符

func < (lhs: myStruct, rhs: myStruct) -> Bool {
  return lhs.item < rhs.item 
}
func<(左:myStruct,右:myStruct)->Bool{
返回左侧项目<右侧项目
}

假设您将结构设置为可散列的,以便它可以作为字典的键,并具有可比性,以便可以对其进行排序,则可以使用以下排序参数按值和键对字典进行排序:

let dict   = [ "A" : 1, "B" : 2, "C" : 2, "D" : 2, "E" : 1 ]
for (key,value) in dict.sort({ $0.1 == $1.1 ? $0.0 < $1.0 : $0.1 < $1.1 })
{
  print("\(value),\(key)")
}
// prints:
// 1,A
// 1,E
// 2,B
// 2,C
// 2,D
让dict=[“A”:1,“B”:2,“C”:2,“D”:2,“E”:1]
用于dict.sort({$0.1==$1.1?$0.0<$1.0:$0.1<$1.1})中的(键,值)
{
打印(“\(值),\(键)”)
}
//印刷品:
//1、A
//1,E
//2,B
//2,C
//2,D

用一些相关代码更新您的问题。展示你迄今为止所做的尝试。显示一些示例数据,并显示您希望从这些数据中得到的结果。您不能拥有这样的字典,因为
myStruct
不可
Hashable
。请确保在实现新功能之前编译了前面的代码。这个答案和@Alain T的答案结合起来解决了我的问题。我必须使结构可散列,然后添加此函数。一旦我做到了这一点,我就能够毫无问题地使用来自的一行程序。