【问题标题】:Sort swift dictionary by value and then sort the final result by key for keys having the same value按值对 swift 字典进行排序,然后对具有相同值的键按键对最终结果进行排序
【发布时间】:2016-01-29 21:06:51
【问题描述】:

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

struct myStruct {
    var item: String!
    var amount: Int!
}

我尝试实施建议 Swift: Sort dictionary keys by value, then by key,这是一个很棒的 IMO 解决方案,但我无法为我拥有的自定义结构实施它。

有什么帮助吗?

【问题讨论】:

  • 用一些相关代码更新您的问题。展示你到目前为止所做的尝试。显示一些示例数据并显示您希望从该数据中得到什么结果。
  • 你不能有这样的字典,因为myStruct 不是Hashable。在实现新功能之前,请确保之前的代码可以编译。

标签: ios swift sorting dictionary


【解决方案1】:

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

func < (lhs: myStruct, rhs: myStruct) -> Bool {
  return lhs.item < rhs.item 
}

【讨论】:

  • 这个答案和来自@Alain T. 的答案结合起来解决了我的问题。我必须使 Struct 可散列,然后添加此函数。一旦我这样做了,我就可以毫无问题地使用来自link 的一个衬垫。
【解决方案2】:

假设您使您的结构可散列,以便它可以成为字典的键并且可比较以便对其进行排序,您可以使用以下排序参数按值和键对字典进行排序:

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

【讨论】:

    猜你喜欢
    • 2015-04-06
    • 2012-04-12
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多