Cocoa和Cocoa Touch:是字典上的一个对象?

Spa*_*Dog 1 iphone cocoa cocoa-touch objective-c nsdictionary

我认为在字典中查找对象是否更简单,但看起来并非如此.

我有一个NSMutableDictionary只有一个名为"products"的键.

我有几个产品动态添加到字典中,使用类似的东西

[myDict addObject:@"banana" forKey:@"products"];
[myDict addObject:@"orange" forKey:@"products"];
[myDict addObject:@"grapes" forKey:@"products"];
Run Code Online (Sandbox Code Playgroud)

等等

在某些时候,我想知道,例如,香蕉是否在字典上.

有没有办法做到这一点?我的意思是,只是想知道一个对象是否在字典上?

谢谢你的帮助.

Dav*_*ong 7

你误解了字典是如何工作的.字典为单个密钥存储单个值.因此,在代码运行后,将保留一个键值对:=> .如果您需要一个键指向多个对象,那么您的密钥将需要指向(或者如果您不关心顺序),然​​后您从而不是从字典中添加和删​​除内容.myDict@"products"@"grapes"NSMutableArrayNSMutableSetNSMutableArray

如果这将是字典中所有内容的基本结构,您可能需要考虑为字典创建一个包装器,如下所示:

//DDMutableMultiValueDictionary.h
@interface DDMutableMultiValueDictionary : NSObject {
  NSMutableDictionary * dict;
}

- (void) addObject:(id)value forKey:(id)key;
- (void) removeObject:(id)value forKey:(id)key;
- (BOOL) containsObject:(id)value forKey:(id)key;

@end

//DDMutableMultiValueDictionary.m
#import "DDMutableMultiValueDictionary.h"

@implementation DDMutableMultiValueDictionary

- (id) init {
  if (self = [super init]) {
    dict = [[NSMutableDictionary alloc] init];
  }
  return self;
}

- (void) dealloc {
  [dict release];
  [super dealloc];
}

- (void) addObject:(id)value forKey:(id)key {
  NSMutableArray * values = [dict objectForKey:key];
  if (values == nil) {
    values = [NSMutableArray array];
    [dict setObject:values forKey:key]
  }
  [values addObject:value];
}

- (void) removeObject:(id)value forKey:(id)key {
  NSMutableArray * values = [dict objectForKey:key];
  [values removeObject:value];
}

- (BOOL) containsObject:(id)value forKey:(id)key {
  NSMutableArray * values = [dict objectForKey:key];
  return [values containsObject:value];
}

@end
Run Code Online (Sandbox Code Playgroud)

这无论如何都不完整,但它可以让你了解如何制作它.