首页 > 解决方案 > 字典 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"

资料来源:使用 Swift 查找字符串中的第一个非重复字符

我对此解决方案的不理解是为什么它总是返回 Q,当过滤器应用于字典时,当有其他元素“S”“A”“B”和“J”可以放在第一位时。我对字典的理解是它们是无序的,当你制作字典时,它们会随着运行而变化。所以如果我做一个:

let dictionary:[String:Int] = ["P": 9, "C": 8, "E": 1]

然后打印'dictionary',排序会有所不同。鉴于此,谁能解释为什么上述解决方案有效并保持添加字典元素的顺序?

标签: swiftdictionary

解决方案


您没有正确查看代码。过滤器不适用于字典。它应用于characters具有定义顺序的数组 ( )。字典仅用于存储计数。


推荐阅读