Я пытаюсь реализовать структуру с общим типом, который соответствует протоколу Hashable. Может кто-нибудь помочь мне понять, почему я получаю ошибку «Ошибка сегментации: 11» со следующим кодом.Generic Swift struct: Ошибка сегментации: 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 благодарит за ответ. Тем не менее, у меня есть нормализованная функция, я не добавлял ее изначально, чтобы сохранить опубликованный код меньше. Я обновил вопрос с нормализацией функции. Кроме того, образец теста, где Im использует эту структуру. Тем не менее, ошибка является ошибкой сегментации: 11 –
Да. Я пытаюсь преобразовать часть моего кода, написанного для байесовского вывода в Python ранее, в Swift для практики. –