swift - 字典 Swift 的排序
问题描述
我正在尝试解决目前正在互联网上进行的问题。问题是:给定一个字符数组,找到第一个不重复的字符。我尝试了一下并解决了它,但我很好奇其他人是如何解决它的,所以我环顾四周,找到了这个答案:
let characters = ["P","Q","R","S","T","P","R","A","T","B","C","P","P","P","P","P","C","P","P","J"]
var counts: [String: Int] = [:]
for character in characters {
counts[character] = (counts[character] ?? 0) + 1
}
let nonRepeatingCharacters = characters.filter({counts[$0] == 1})
let firstNonRepeatingCharacter = nonRepeatingCharacters.first!
print(firstNonRepeatingCharacter) //"Q"
我对此解决方案的不理解是为什么它总是返回 Q,当过滤器应用于字典时,当有其他元素“S”“A”“B”和“J”可以放在第一位时。我对字典的理解是它们是无序的,当你制作字典时,它们会随着运行而变化。所以如果我做一个:
let dictionary:[String:Int] = ["P": 9, "C": 8, "E": 1]
然后打印'dictionary',排序会有所不同。鉴于此,谁能解释为什么上述解决方案有效并保持添加字典元素的顺序?
解决方案
您没有正确查看代码。过滤器不适用于字典。它应用于characters
具有定义顺序的数组 ( )。字典仅用于存储计数。
推荐阅读
- python - 将数据发送到烧瓶而不重新加载页面
- c++ - c++ 项目中令人困惑的定义指令
- java - 休眠搜索将一个实体索引到两个不同的索引
- selenium - Selenium 未通过代理加载页面,显示构建信息:版本:'未知',修订:'未知',时间:'未知'
- c++ - 结构化绑定初始化程序表单 { assignment-expression } 在 clang 上的数组类型失败
- python - 如果 Pandas 数据框中的两个布尔值为真,如何替换元素
- webpack - 运行 webpack encore 时出现语法错误
- c# - 为什么我不能使用 SHA256 创建 jwt 令牌?
- github - 如何选择默认文件以在 github 存储库页面 URL 上打开?
- javascript - React Typescript:使用按钮添加另一行字段以形成