当没有字典时,“在字典中发现类型的重复键...”?
" Duplicate keys of type ... were found in a Dictionary " when there is no Dictionary?
我是 Swift 的新手,我刚遇到一个错误,我找不到解决方案。我目前正在开发一款游戏(Boggle,出于好奇),我想更新算法找到的单词列表。
我创建了一个结构来保存每个单词及其得分:
struct ScoredWord: Comparable, Identifiable{
let word: String
var points: Int = 0
let id: UUID
init(word: String){
self.id = UUID()
self.word = word
self.points = self.defineScore(word: word)
}
static func < (lhs: ScoredWord, rhs: ScoredWord) -> Bool {}
static func == (lhs: ScoredWord, rhs: ScoredWord) -> Bool {}
func hash(into hasher: inout Hasher) {
private func defineScore(word: String) -> Int{}
(我把func的内容去掉了,因为它对你没用)
算法完成后,我有一个简单的循环,为找到的每个单词创建一个结构,并将其存储在 @Published 数组中以供显示
let foundWords = solver.findValidWords()
for found in foundWords {
wordList.append(ScoredWord(word: found))
}
数组在我看来是这样使用的:
List(wordListViewModel.wordList, id: \.self) { // 1 Word list
Text( [=12=].word )
Spacer()
Text("\( [=12=].points )")
}
当我 运行 所有这一切时我得到的错误是:
Fatal error: Duplicate keys of type 'ScoredWord' were found in a Dictionary.
This usually means either that the type violates Hashable's requirements, or
that members of such a dictionary were mutated after insertion.
我发现 this post 关于相同的错误,其中一条评论指出错误来自列表显示速度不够快和 ID 混淆,但没有关于如何修复它的信息...
有什么想法吗?
我认为您没有完全符合 Hashable Protocol
注意你缺少的func hash(into hasher: inout Hasher)
函数
Hash table 是一个字典。 What is the true difference between a dictionary and a hash table?
您数组中的某些结构似乎是使用相同的词和点构成的。将另一个变量添加到您的结构中:
var 标识符 = UUID()
它将生成一个唯一的 ID。
我是 Swift 的新手,我刚遇到一个错误,我找不到解决方案。我目前正在开发一款游戏(Boggle,出于好奇),我想更新算法找到的单词列表。
我创建了一个结构来保存每个单词及其得分:
struct ScoredWord: Comparable, Identifiable{
let word: String
var points: Int = 0
let id: UUID
init(word: String){
self.id = UUID()
self.word = word
self.points = self.defineScore(word: word)
}
static func < (lhs: ScoredWord, rhs: ScoredWord) -> Bool {}
static func == (lhs: ScoredWord, rhs: ScoredWord) -> Bool {}
func hash(into hasher: inout Hasher) {
private func defineScore(word: String) -> Int{}
(我把func的内容去掉了,因为它对你没用)
算法完成后,我有一个简单的循环,为找到的每个单词创建一个结构,并将其存储在 @Published 数组中以供显示
let foundWords = solver.findValidWords()
for found in foundWords {
wordList.append(ScoredWord(word: found))
}
数组在我看来是这样使用的:
List(wordListViewModel.wordList, id: \.self) { // 1 Word list
Text( [=12=].word )
Spacer()
Text("\( [=12=].points )")
}
当我 运行 所有这一切时我得到的错误是:
Fatal error: Duplicate keys of type 'ScoredWord' were found in a Dictionary.
This usually means either that the type violates Hashable's requirements, or
that members of such a dictionary were mutated after insertion.
我发现 this post 关于相同的错误,其中一条评论指出错误来自列表显示速度不够快和 ID 混淆,但没有关于如何修复它的信息...
有什么想法吗?
我认为您没有完全符合 Hashable Protocol
注意你缺少的func hash(into hasher: inout Hasher)
函数
Hash table 是一个字典。 What is the true difference between a dictionary and a hash table?
您数组中的某些结构似乎是使用相同的词和点构成的。将另一个变量添加到您的结构中:
var 标识符 = UUID()
它将生成一个唯一的 ID。