Swift中如何从排序后的元组数组中提取相同顺序的key数组
你之前的方案失效的核心原因是Swift中的
Dictionary属于无序集合,底层由哈希表实现,插入顺序不会被保留,所以把排序后的元组重新存入字典必然会丢失顺序。
你不需要将排序后的元组转成字典,Dictionary.sorted(by:)方法返回的本身就是顺序固定的[(key: String, value: Int)]元组数组,直接对该数组做映射提取key即可保留排序顺序。
场景1:仅需要排序后的key数组
// 排序并直接提取有序key func getSortedKeysByValue(_ dict: [String: Int]) -> [String] { // 按value升序排序,如需降序把 < 替换为 > 即可 return dict.sorted(by: { $0.value < $1.value }).map(\.key) } // 调用示例 let personalInfoDict = screenConfigResponse?.screenConfiguration?.personalInformation var sortedPersonalKeys: [String] = [] if let dict = personalInfoDict, !dict.isEmpty { sortedPersonalKeys = getSortedKeysByValue(dict) }
场景2:需要同时保留排序后的键值对
如果后续逻辑还需要用到对应value,直接存储排序后的元组数组即可:
let sortedItems = dict.sorted(by: { $0.value < $1.value }) // 按需提取key或value let sortedKeys = sortedItems.map(\.key) let sortedValues = sortedItems.map(\.value)
内容的提问来源于stack exchange,提问作者Mohan Ramanathan
相关产品推荐
相关产品推荐

