gpt4 book ai didi

objective-c - Cocoa:使用 NSSet 作为 NSMutableDictionary 中的键有什么缺点吗?

转载 作者:行者123 更新时间:2023-12-03 16:51:01 25 4
gpt4 key购买 nike

使用 NSSet 作为 NSMutableDictionary 中的键有什么缺点吗?有什么需要注意的问题吗?有什么巨大的性能影响吗?

我认为键是在 Cocoa 容器中复制的,这是否意味着 NSSet 被复制到字典中?或者在这种情况下是否有一些保留 NSSet 的优化?

相关于Can a NSDictionary take in NSSet as key?

示例代码:

NSMutableDictionary * dict = [NSMutableDictionary dictionary];

NSSet * set;
set = [NSSet setWithObjects:@"a", @"b", @"c", @"d", nil];
[dict setObject:@"1" forKey:set];

set = [NSSet setWithObjects:@"b", @"c", @"d", @"e", nil];
[dict setObject:@"2" forKey:set];

id key;
NSEnumerator * enumerator = [dict keyEnumerator];
while ((key = [enumerator nextObject]))
NSLog(@"%@ : %@", key, [dict objectForKey:key]);

set = [NSSet setWithObjects:@"c", @"b", @"e", @"d", nil];
NSString * value = [dict objectForKey:set];
NSLog(@"set: %@ : key: %@", set, value);

输出:

2009-12-08 15:42:17.885 x[4989] (d, e, b, c) : 2
2009-12-08 15:42:17.887 x[4989] (d, a, b, c) : 1
2009-12-08 15:42:17.887 x[4989] set: (d, e, b, c) : key: 2

最佳答案

I think keys are copied in Cocoa containers, does it mean NSSet is copied to dictionary? Or is there some optimization that retains the NSSet in this case?

NSDictionaries 会复制它们的键。

不可变集可能会通过返回保留的自身来响应复制,从而使“复制”实际上是免费的。

可变集将通过返回其自身的副本来响应copy,这就是为什么使用可变对象作为键通常是一个坏主意(在变异后您将无法找到原始对象)因为它不再与字典中的键进行比较)。

关于objective-c - Cocoa:使用 NSSet 作为 NSMutableDictionary 中的键有什么缺点吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1864718/

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