使用nil初始化程序将Swift数组简化为[Int:Int?]为空

电动企鹅

为什么将数组简化为带有键作为数组值和值为nil的散列会产生空结果?

[1,2,3].reduce(into: [Int:Int?](), { $0[$1] = nil })
[1,2,3].reduce(into: [Int:Int?](), { $0[$1] = 1 })

这两个都应该有3个条目,对不对?

迈克尔·托特

在Swift中,将字典值设置为nil您在问题中所做的一样,会从字典中完全删除该值。但是,对此有一些奇怪的警告。

在您的示例中,您使用一个Dictionarywith类型[Int:Int?]

var dictionary: [Int:Int?] = [1: 1, 2: 1, 3: 1]

nil通过以下方式将值设置为可以将其删除:

dictionary[1] = nil

将值设置为niltypeInt?nil改为分配

dictionary[1] = nil as Int?

同样,使用该updateValue(_:forKey:)函数将执行以下操作:

dictionary.updateValue(nil, forKey: 1)

执行这些操作之一后,打印字典将显示以下内容:

[1: nil, 2: Optional(1), 3: Optional(1)]

因此,该行为有些奇怪,但可以实现您预期的结果。我真的不推荐它,因为它很不自然。不过有可能。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将 int 数组初始化为类型参数

使用memset初始化int数组

如何初始化大小为 n 的 int java 数组最初为空?

是否将int初始化为0?

int数组初始化

如何使用int数组[] []初始化向量<vector <int >>?

无法使用类型为JSON的参数列表调用类型为'Int'的初始化程序

使用对象初始化程序将值初始化为类的类型列表的公共变量

无法使用类型为“([Int])”的参数列表调用类型“Double”的初始化程序

使用初始化程序列表将const数组引用实例化为构造函数参数,是否允许?

使用结构内部的 int 变量初始化静态数组

无法使用类型为“(Int32?)”的参数列表调用类型“UnsafeMutablePointer<Int32>”的初始化程序

我的Int *数组是否全部初始化为NULL?

初始化时无法将“ <括号包围的初始化程序列表>”转换为“ int *”

C ++ Vector <int>数组初始化

将char数组初始化为字符串值,未初始化的索引是否设置为null?

反应钩子 - 将数组重新初始化为空

将方法调用中的int []初始化为参数

领域迁移-将新的主键初始化为int

为什么可以将char指针变量初始化为字符串,但不能将int指针变量初始化为整数数组?

通过将属性设置为nil在Swift中再次触发惰性初始化器

NSCalendar初始化展开为nil,Swift

如何在构造函数中使用初始化程序将二维数组设置为相同的值?

有没有办法将所有 int 数组元素初始化为零,除了循环

C ++在模板函数中初始化大小为“ static * int”的char数组

首次将值初始化为整数数组后无法重新初始化

错误:无法使用初始化程序列表初始化非聚合类型“ vector <int>”

错误:无法使用初始化程序列表初始化非聚合类型的vector <int>

无法从<括号包围的初始化程序列表>转换为int(*)数组