- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
是否有 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]
并逐步添加内容。但这似乎不是一个好的解决方案。使用 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 开始,您可以直接从键/值对序列:
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/
我只是在学习Objective-C,有一本书的代码是这样的: NSArray *foods = [[[NSArray alloc] initWithObjects: @"cheese", @"ham"
This question already has answers here: Swift equivalent to `[NSDictionary initWithObjects: forKeys:
在我的项目中,我创建了一个包含对象和键的字典我为对象和键创建 NSArray 但是当我尝试创建字典时它会发送以下错误: * Terminating app due to uncaught except
作为测试,我在 applicationDidFinishLaunching 的第一行执行以下操作: NSArray *list=[[NSArray alloc] initWithObjects:@"A
检查我的 iOS6 应用程序并尝试为 iOS7 修复所有问题。在我的整个应用程序中,我遇到了错误: -[__NSPlaceholderDictionary initWithObjects:forKey
我有一些数组,我只需要在我的 .M 文件中,所以我认为我在接口(interface)括号中声明它们,就像在 MyViewController.m 中一样(通过这个,我将它们设为私有(private)变
我不明白为什么要写这些代码 icons = [[NSArray alloc] initWithObjects: @"appointment", @"
在Apple Document他们用 &value 初始化 NSSet 对象,我以前从未见过这个。有人可以为我解释一下吗?从文档看它似乎 initWithObjects: 需要对象的 C 数组,&va
我有以下代码: queryParams = @{@"geo_location" : [GlobalData sharedGlobalData].latLong, @"sale_ids": select
你能解释一下这两行之间的确切区别吗? NSArray *foo = [NSArray arrayWithObjects:@"hai",@"how",@"are",@"you",nil]; NSArra
Swift 新手。我有一段 Objective-C 代码,如下所示: self.imageArray = [[NSMutableArray alloc] initWithObjects:@{@"nam
当使用“initWithObjects”将对象添加到 NSArray 时,任何人都可以为我确认这些项目已保留。我很确定它们是,但在任何地方都找不到关于 initWithObjects 的提及? //
是否有 Swift 的原生 Dictionary 与 [NSDictionary initWithObjects: forKeys:] 的等价物? 假设我有两个包含键和值的数组,我想将它们放入字典中。
有人可以帮我解决这个问题吗? 我正在构建一个 iPad 应用程序,它有一个 TableViewController,应该显示 1000 到 2000 个字符串之间的内容。我在单例中有那些 NSStri
我正在尝试在 iOS 上使用电子邮件和密码进行简单登录。登录时出现以下错误。 Terminating app due to uncaught exception 'NSInvalidArgumentE
我和一位工作同事正在努力正确回答两者之间的确切区别创建数组的两种不同方式: NSArray *array1 = @[@"this is my first entry",@"this is my sec
我正在使用 NSMutableUrl 请求从 .net Web 服务器获取 Web 数据。 在通过使用 NSXmlparsing 解析响应将我存储在 NSDirectory 中之后,我正在使用肥皂请求
仍在此处学习 Objective-C/iPhone SDK。我想我知道为什么这不起作用,但我只是想确认一下。 在awakeFromNib中,如果我使用[[NSMutableDictionary all
如标题所示.. 我的 JSON 的 NSDictionary initWithObjectsAndKeys,使用 POST 方法,通过 PHP 代码进行 MySQL 查询,通过使用 json_enco
我正在加载应用程序后将图像延迟加载到数组中。我尝试过使用 NSMutableArray 和 NSArray(创建数组后我不需要更改它)但后者让我崩溃。 ... [self performSelecto
我是一名优秀的程序员,十分优秀!