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

前端之家收集整理的这篇文章主要介绍了ios – Swift相当于`[NSDictionary initWithObjects:forKeys:]`前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Swift的原生字典是否与[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]并逐步添加东西.但这似乎不是一个好的解决方案.使用zip和enumerate可能是同时迭代两者的更好方法.然而,这种方法意味着拥有一个可变的字典,而不是一个不可变的字典.

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

解决方法

从Swift 4开始,您可以直接从a创建字典
键/值对序列:
let keys = ["one",3]

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

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

这假设所有键都不同,否则将中止
运行时异常.

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

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

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

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

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

原文链接:https://www.f2er.com/iOS/332337.html

猜你在找的iOS相关文章