如何按Double元素对Swift自定义元组类型数组排序?
按元组的频率值降序排序数组
你已经完成了符号频率统计和关联数组构建的工作,接下来要对frequenciesOutputText数组按元组的第二个元素(频率百分比)降序排序非常简单,直接利用Swift的sorted(by:)方法就能搞定:
// 按频率降序排序数组(生成新数组,不修改原数组) let sortedFrequencies = frequenciesOutputText.sorted { $0.1 > $1.1 } // 如果需要直接修改原数组,可以用sort(by:) // frequenciesOutputText.sort { $0.1 > $1.1 }
代码说明:
sorted(by:)会根据你传入的闭包逻辑生成一个全新的排序后数组,原数组保持不变;如果希望直接修改原数组,改用sort(by:)即可- 闭包里的
$0和$1代表数组中任意两个待比较的元组,$0.1取第一个元组的Double类型频率值,$1.1取第二个的,用>就实现了降序排列
输出符合预期格式的结果
如果你需要输出("о", 10.97)%这类格式的内容,可以遍历排序后的数组,同时把频率值格式化为指定小数位数:
for item in sortedFrequencies { // 用%.2f把频率格式化为两位小数,和你期望的格式匹配 print("(\(item.0), \(String(format: "%.2f", item.1)))%") }
可选优化:过滤无频率的符号
如果统计结果里有很多频率为0的符号,排序前可以先过滤掉,让结果更简洁:
let filteredSortedFrequencies = frequenciesOutputText .filter { $0.1 > 0 } // 只保留频率大于0的元素 .sorted { $0.1 > $1.1 }
这样处理后,你就能得到完全符合预期的、按频率从高到低排列的符号列表啦!
内容的提问来源于stack exchange,提问作者Luigi Vampa
相关产品推荐
相关产品推荐

