当前位置: 首页 > 面试题库 >

在Swift中,我可以使用元组作为字典的键吗?

闻人哲茂
2023-03-14
问题内容

我想知道我能否以某种方式使用x,y对作为字典的键

let activeSquares = Dictionary <(x: Int, y: Int), SKShapeNode>()

但是我得到了错误:

Cannot convert the expression's type '<<error type>>' to type '$T1'

和错误:

Type '(x: Int, y: Int)?' does not conform to protocol 'Hashable'

那么..我们怎样才能使其符合标准?


问题答案:

的定义Dictionarystruct Dictionary<KeyType : Hashable, ValueType> : ...,即密钥的类型必须符合协议Hashable。但是语言指南告诉我们协议可以被类,结构和枚举所采用,即不能被元组所采用。因此,元组不能用作Dictionary键。

一种解决方法是定义一个包含两个Ints的可哈希结构类型(或您要放入元组的任何内容)。



 类似资料:
  • 问题内容: 我正在研究列表和元组之间的区别(在Python中)。一个明显的例子是,元组是不可变的(在初始赋值后不能更改值),而列表是可变的。 文章中的一句话让我明白了: 只能将不可变元素用作字典键,因此只能将元组而不是列表用作键。 我很难考虑要使用元组作为字典键的情况。您能否提供一个示例问题,说明这是自然,高效,优雅或显而易见的解决方案? 编辑: 感谢您的示例。到目前为止,我认为一个非常重要的应用

  • 问题内容: 基本上,我想设置一个使用“ for”作为参数以提高可读性的函数。 我设置了类似的内容,但是当我尝试将开关用于“ for”时,它将作为关键字出现并引发编译错误。 干杯 问题答案: 使用关键字作为普通标识符时,您必须使用反引号`对此进行转义

  • 问题内容: 我以为只有不可变的对象才可以是字典键,但是上面的对象是可变的。 问题答案: 具有hash方法的任何对象都可以是字典键。对于您编写的类,此方法默认返回基于id(self)的值,并且如果相等性不是由这些类的标识决定的,则将它们用作键可能会让您感到惊讶: 在2.6版中进行了更改:__hash__现在可以设置为None,以将类实例明确标记为不可哈希。[ hash ]

  • 问题内容: Python中是否有一种方法可以序列化使用元组作为键的字典: 只需使用json.dumps(a),就会产生: 问题答案: 您不能将其序列化为json,json对于什么算作dict键要比python灵活得多。 您可以将映射转换为键,值对的序列,如下所示:

  • 问题内容: class A(): def init(self, data=’‘): self.data = data 我该如何正确执行呢? 我试图获取(不是)另一个具有相同内容的A()BUT实例。 问题答案: 答案是可以的,您需要重新定义: 如另一条注释中所述,默认实现只是简单的标识,因此,如果要使其更复杂,则需要显式定义。

  • 问题内容: 我的数据结构有一个枚举作为键,我希望以下内容能自动解码。这是错误还是某些配置问题? 我得到的错误是,这似乎使字典与数组混淆。 typeMismatch(Swift.Array,Swift.DecodingError.Context(codingPath:[可选(__lldb_expr_85.AStruct。(_ 0E2FD0A9B523101D0DCD67578F72D1DD中的Cod