我想實現一個符合Hashable協議的泛型類型的結構。任何人都可以幫助我理解爲什麼我會在下面的代碼中看到「Segmentation fault:11」錯誤。通用Swift結構:分段錯誤:11
我真的很感激任何有關這方面的見解。
struct Pmf<Element: Hashable> {
typealias Distribution = [Element : Float]
fileprivate var normalized = false
fileprivate var distribution:[Element : Float] = [ : ] {
didSet {
self.normalized = false
}
}
}
extension Pmf {
init(values: [Element], withProbs probs: [Float]) {
for pair in zip(values, probs) {
self.distribution[pair.0] = pair.1
}
}
var probDist: Distribution {
mutating get {
if !normalized {
self.normalize()
}
return self.distribution
}
}
subscript(value: Element) -> Float? {
mutating get {
if !normalized {
self.normalize()
}
return self.distribution[value]
}
set(prob) {
self.distribution[value] = prob
}
}
mutating func normalize() {
for (key, val) in self.distribution {
self.distribution[key] = val/Float(self.distribution.count)
}
}
}
var pp = Pmf<String>()
pp["One"] = 4
pp["Two"] = 5
pp["three"] = 5
print(pp)
您的例子不編譯,因爲你沒有方法'normalize()'。另外,你可以發佈使用這個結構的代碼嗎? – ColGraff
@ColGraff感謝您的回覆。但是,我確實有一個標準化函數,我並沒有在最初添加它來減少發佈的代碼。我用normalize函數更新了這個問題。另外,一個示例測試,其中Im使用此結構。但是,錯誤是分段錯誤:11 –
是的。我試圖將我之前爲Python中的貝葉斯推理編寫的一些代碼轉換爲Swift進行實踐。 –