- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经尝试解决这个问题有一段时间了,但我并不完全清楚它为什么或如何工作。
我需要存储一对映射到对象的标识符(单独存储,因此它们不能连接在一起)。最初,我为此使用了顶级 NSMutableDictionary 实例,并在其下面嵌套了 NSMutableDictionary 对象。要检索标识符对的值,我可以调用:
[[myTopLevelDictionary objectForKey:key1] objectForKey:key2]
即使跟踪嵌套的 NSMutableDictionary 实例需要一些额外的工作,这也能很好地工作。
昨天,我想知道是否有任何方法可以直接使用一对 NSString 对象作为键。因此,我尝试使用两个 NSString 对象创建一个 NSArray 实例,并使用它作为键,它起作用了:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
NSArray *key = [NSArray arrayWithObjects:@"A", @"B", nil];
[dict setObject:@"foobar" forKey:key];
NSLog(@"%@", [dict objectForKey:key]);
NSLog(@"%@", [NSArray arrayWithObjects:@"A", @"B", nil];
// Even this seems to work?
NSMutableArray *key2 = [NSMutableArray arrayWithObjects:@"A", @"B", @"C", nil];
[key2 removeLastObject];
NSLog(@"%@", key2);
所有三种情况都将成功打印“foobar”。如果我更改数组中 NSString 对象的顺序,则字典将返回 nil 。如果我添加或删除 NSString 对象,字典将再次正确返回 nil。只有具有正确 NSString 对象且包含正确顺序的正确内容的 NSArray 对象似乎才能检索到适当的值。
我的问题是...为什么会起作用以及如何起作用?
我知道哈希与它有关,但是将哈希发送到 NSArray 对象似乎只是返回对象计数,所以我无法想象这与它有多大关系。然后我想也许 NSDictionary 试图获取 NSArray 的描述并将其用作基于字符串的键,但我不确定如何测试这个理论,因为 NSString 的哈希与 NSArray 的哈希不同(所以我不能只是使用复制 [[NSArray arrayWithObjects:@"A", @"B", nil] description]
) 输出的 NSString 键。
别误会我的意思,如果我能像这样使用 NSArray/NSString/NSMutableDictionary 那就太好了,我只是想确保事情按照我认为的方式工作,而这不是一些某种奇怪的未定义行为或其他东西。
最佳答案
无论您使用什么“键”作为字典的键/值输入,都将被散列并在内部用作真正的键。使用数组作为键时必须非常小心,因为如果对它进行任何修改,它的哈希值都会改变,因此您将无法再访问该值。
为了回答你的问题,它是有效的,因为 key (NSArray)可以被散列。它是如何工作的:因为存储的“key”是 NSArray 的哈希值,而不是数组本身(出于性能和存储大小的原因)。当您使用 NSString 作为键时,它会执行相同的操作并在内部存储字符串的哈希值。
关于objective-c - 为什么 NSString 的 NSArray 可以作为 NSMutableDictionary 的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31891378/
设置 我有一个 NSMutableDictionary,其中包含超过 800 个代表员工的 NSMutableDictionaries。我正在尝试实现一个搜索栏,但在使用我的词典时遇到严重问题。 在第
我有一个 NSMutableDictionary,其中的每个元素都是另一个字典。将其内容复制到另一个 NSMutableDictionary 的最佳方式是什么?我试过使用: firstDictiona
我有 2 个 NSMutableDictionaries,每个都有 5 个 NSArray, 这 2 个 NSMutableDictionaries 有完全相同的 5 个键和 NSArray,但内容不
将 NSMutableDictionary 添加到 NSMutableDictionary 是创建副本还是保留指针。 我希望能够更新第一个 NSMutableDictionary 的内容并在另一个 N
所以我有三个像这样的 NSMutableDictionary: .h文件 NSMutableDictionary *myContainer; NSMutableDictionary *myD1; NS
我想将 NSMUtableDictionary 值复制到另一个 NSMutableDictionary 中。我怎样才能做到这一点? 这是我的代码, PersonClass.h file: NSMu
仍在此处学习 Objective-C/iPhone SDK。我想我知道为什么这不起作用,但我只是想确认一下。 在awakeFromNib中,如果我使用[[NSMutableDictionary all
我在这个数组中有一个 NSArray 和 NSMutableDictionary 对象,如下所示。我想在这个数组的索引:2 处得到一个对象,并将来自以下数组的 NSMutableDictionary
要创建一个空字典,我应该调用 [NSMutableDictionary dictionary] 还是 [[NSMutableDictionary alloc] init]? 有什么区别? 最佳答案 [
对于存储在 NSMutableDictionary 中的字母表中的每个字母,我有 5 个 UIImageView。 5 而不是 1,以防万一他们想要拼写的单词需要更多相同的字母。 我正在创建这样的字母
一旦 NSMutableDictionary 已经达到对象的容量限制,当您尝试添加到它时会发生什么?这会撞出一个还是会抛出异常?当我添加一个新的字典对象时,有没有办法让它撞出最旧的字典对象? 最佳答案
我有 NSMutableDictionary *mutDic; 它加载了来自其他NSMutableDictionary的一些值从警报中我试图更新其值 - (void)alertView:(UIAler
在我的 iPhone 应用程序中,我使用整数来跟踪大量变量。我在我的 AppDelegate 文件(它是一个多 View 应用程序)中声明并初始化了它们,然后如果我在其他 View (类)中声明它们,
我有一个递归函数,可以将以前的字典添加到新字典中,但使用 addEntriesFromDictionary 会出现错误 这是我的示例代码(已编辑) func fetchAllSWApiList
我有一个应用程序可以从 Web 服务下载信息并将其缓存在内存中。具体来说,我的单例缓存类包含一个实例变量 NSMutableDictionary *memoryDirectory,它包含所有缓存数据。
我今天遇到了一个策略错误。我有一个 NSArray 和一个 NSMutableDictionary。问题是我的 NSMutableDictionary 变成了一个数组。这是代码: 标题: NSArra
我的 iOS 应用程序中有以下方法。声明: GMSMarker *marker = [places objectForKey:place]; 并不总能找到关键的对象,当我明确知道有一个对象要找到时。
我有两个 NSMutableDictionay,我们将预期的一个称为“A”,将操作结果的一个称为“B” 我想将“A”和“B”之间的差异插入“C”NSMutableDictionary。 我使用 if
我有一个日期选择器和一个 UIBarButtonItem,当按下 UIBarButtonItem 时,它会调用一个方法将所选日期添加到 NSMutableDictionary。代码如下所示: diar
我在 NSMutableDictionary 中面临非常奇怪的问题。请看下面的代码。 NSMutableDictionary *dict=[[NSMutableDictionary alloc]in
我是一名优秀的程序员,十分优秀!