gpt4 book ai didi

swift - 如何使用自定义类类型作为 Swift 字典中的键?

转载 作者:IT王子 更新时间:2023-10-29 05:36:26 26 4
gpt4 key购买 nike

我正在使用 Swift 构建一个项目,我正在尝试创建一个字典来存储名为 Pixel(KEY,用于存储颜色信息,例如 RGB 值)和 int 值(Value,用于计算相同颜色在同一图像上出现的次数)。

如果这是在 C# 中,工作代码应该是:

Dictionary<Pixel, int> colorDictionary = new Dictionary< Pixel, int> () ;

在 Swift 中,我试过:

var colorDictionary = Dictionary<Pixel, Int>()

但是,我得到的错误是:

"Type 'Pixel' does not conform to protocol 'Hashable'"

我应该怎么做才能解决这个问题?非常感谢!

最佳答案

任何要使用字典键的自定义类型都必须符合 Hashable协议(protocol)。

此协议(protocol)具有一个您必须实现的属性。

var hashValue: Int { get }

使用此属性生成一个 int,Dictionary 可以将其用于查找原因。您应该尝试使生成的哈希值对于每个像素都是唯一的。

Swift 书中有以下注释,因此您可以进行随机散列(只要它是唯一的):

The value returned by a type's hashValue property is not required to be the same across different executions of the same program, or in different programs.

注意因为 Hashable 继承自 Equatable您还必须实现:

func ==(_ lhs: Self, _ rhs: Self) -> Bool.

我不确定你的像素的内部结构是什么,但当两个像素具有相同的“x”和“y”值时,你可能会认为两个像素相等。最终逻辑由您决定。

根据需要修改:

struct Pixel : Hashable {

// MARK: Hashable
var hashValue: Int {
get {
// Do some operations to generate a unique hash.
}
}
}

//MARK: Equatable
func ==(lh: Pixel, rh: Pixel) -> Bool {
return lh.x == rh.x && rh.y == lh.y
}

关于swift - 如何使用自定义类类型作为 Swift 字典中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31332680/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com