【问题标题】:How to sort a dictionary based on keys and sort its respective values in Swift如何根据键对字典进行排序并在 Swift 中对其各自的值进行排序
【发布时间】:2018-05-11 03:52:17
【问题描述】:

我有一个字典,其中字符串作为键,int 数组作为值,我需要根据键对字典进行排序,并且数组值也应该进行排序。

var dicNumArray : Dictionary<String , [Int]> = ["q":[4,3,2,1,5],"a":[2,3,4,5,5],"s":[123,123,132,43,4],"t":[0,88,66,542,321]]

我需要的结果是字典本身,它按键排序,并且相应的值也被排序。

【问题讨论】:

  • 您期望什么类型的输出?您是在打印什么东西,还是在创建一个新的数据结构(例如数组?)您在使用 .sorted 方法时遇到过问题吗?
  • 字典没有顺序。看看这个:stackoverflow.com/a/29603477/6642629

标签: swift dictionary swift4 key-value


【解决方案1】:

您可以使用mapValuessorted 应用于字典键值对的每个value

然后,您可以将sorted 与比较字典键的谓词一起使用。

let result = dicNumArray.mapValues { $0.sorted() }
                        .sorted { $0.key < $1.key }

这将返回一个键值对元组数组。

由于字典不能按顺序信任,因此使用键值对数组是下一个最佳方法。

我们可以使用.key.value 来获取各自的值。

result.first?.key     // First key
result.first?.value   // First value

【讨论】:

    【解决方案2】:

    字典在 Swift 中没有顺序。话虽如此,你可以做这样的事情

    var dicNumArray : Dictionary<String , [Int]> = ["q":[4,3,2,1,5],"a":[2,3,4,5,5],"s":[123,123,132,43,4],"t":[0,88,66,542,321]]
    
    func sortData() {
        for (key, value) in dicNumArray {
            dicNumArray[key] = value.sorted(by: { $0 < $1 })
        }
    }
    
    sortData()
    

    这将为每个键排序数组。完成后,您可以执行类似的操作

    let keys = Array(dicNumArray.keys).sorted(by: { $0 < $1 })
    

    这将为您提供字典键的排序数组。可以按如下方式测试

    测试

    for key in keys {
        print("\(key): \(dicNumArray[key]!)")
    }
    

    输出

    a: [2, 3, 4, 5, 5]
    q: [1, 2, 3, 4, 5]
    s: [4, 43, 123, 123, 132]
    t: [0, 66, 88, 321, 542]
    

    【讨论】:

      【解决方案3】:

      您可以应用排序键,然后映射到按数组排序

      let sortedKeysAndValues = dicNumArray.sorted(by: {$0.0 < $1.0}).map { [$0.key:$0.value.sorted(by: <)]}.flatMap({$0})
      

      【讨论】:

      • 这作为一个数组返回,我如何把它作为字典本身
      • 它的字典[:]
      • @AbdelahadDarwish : 它从不返回字典,它会返回排序后的元组数组
      猜你喜欢
      • 1970-01-01
      • 2011-12-11
      • 2014-10-23
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      相关资源
      最近更新 更多