gpt4 book ai didi

ios - Swift 相当于 `[NSDictionary initWithObjects: forKeys:]`

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

是否有 Swift 的原生 Dictionary[NSDictionary initWithObjects: forKeys:] 的等价物?

假设我有两个包含键和值的数组,我想将它们放入字典中。在 Objective-C 中,我会这样做:

NSArray *keys = @[@"one", @"two", @"three"];
NSArray *values = @[@1, @2, @3];
NSDictionary *dict = [[NSDictionary alloc] initWithObjects: values forKeys: keys];

当然,我可以使用计数器遍历两个数组,使用 var dict: [String:Int] 并逐步添加内容。但这似乎不是一个好的解决方案。使用 zipenumerate 可能是同时迭代两者的更好方法。然而,这种方法意味着有一个可变的字典,而不是一个不可变的字典。

let keys = ["one", "two", "three"]
let values = [1, 2, 3]
// ???
let dict: [String:Int] = ["one":1, "two":2, "three":3] // expected result

最佳答案

Swift 4 开始,您可以直接从键/值对序列:

let keys = ["one", "two", "three"]
let values = [1, 2, 3]

let dict = Dictionary(uniqueKeysWithValues: zip(keys, values))

print(dict) // ["one": 1, "three": 3, "two": 2]

这假设所有的键都是不同的,否则它会中止有运行时异常。

如果不能保证键是不同的,那么你可以这样做

let keys = ["one", "two", "one"]
let values = [1, 2, 3]

let dict = Dictionary(zip(keys, values), uniquingKeysWith: { $1 })

print(dict) // ["one": 3, "two": 2]

第二个参数是一个闭包,它决定了哪个值“获胜”在重复键的情况下。

关于ios - Swift 相当于 `[NSDictionary initWithObjects: forKeys:]`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34927057/

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