OC集合类之NSDictionary、NSMutableDictionary(二)

一、NSDictionary(不可变字典)

概述:

在编程中,字典(dictionary)是关键字及其定义的集合。NSDictionary是Cocoa中的一个集合类,它能在给定的关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的OC对象),然后根据这个关键字来查找相应的数据。

实例方法:


//根据key查找akey对应的值

- (nullableObjectType)objectForKey:(KeyType)aKey;

//获取字典所有键值

- (NSEnumerator *)keyEnumerator;

//初始化字典

- (instancetype)init NS_DESIGNATED_INITIALIZER;

//初始化字典(根据不同的编译条件)

#if TARGET_OS_WIN32

- (instancetype)initWithObjects:(constObjectType_Nonnull[_Nullable])objects forKeys:(constKeyType_Nonnull[_Nullable])keys count:(NSUInteger)cnt;

#else

- (instancetype)initWithObjects:(constObjectType_Nonnull[_Nullable])objects forKeys:(constKeyType_Nonnull[_Nullable])keys count:(NSUInteger)cntNS_DESIGNATED_INITIALIZER;

#endif

- (nullableinstancetype)initWithCoder:(NSCoder*)aDecoderNS_DESIGNATED_INITIALIZER;

//根据所填入的object返回对应所有的key键值

- (NSArray *)allKeysForObject:(ObjectType)anObject;

//根据设置的locale进行连接数组

- (NSString*)descriptionWithLocale:(nullableid)locale;

//根据设置的locale进行连接数组

- (NSString*)descriptionWithLocale:(nullableid)locale indent:(NSUInteger)level;

//字典判断

- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;

//获取字典所有对象值

- (NSEnumerator *)objectEnumerator;

//字典将某个特定的数组作为key值传进去得到对应的value,如果某个key找不到对应的key,就用notFoundMarker提前设定的值代替

- (NSArray *)objectsForKeys:(NSArray *)keys notFoundMarker:(ObjectType)marker;

//将字典序列化为NSRabryType格式中指定的URL

- (BOOL)writeToURL:(NSURL*)url error:(NSError**)errorAPI_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));

//排序

- (NSArray *)keysSortedByValueUsingSelector:(SEL)comparator;

- (void)getObjects:(ObjectType_Nonnull__unsafe_unretained[_Nullable])objects andKeys:(KeyType_Nonnull__unsafe_unretained[_Nullable])keys count:(NSUInteger)countAPI_AVAILABLE(macos(10.7), ios(5.0), watchos(2.0), tvos(9.0))NS_SWIFT_UNAVAILABLE("Use 'allKeys' and/or 'allValues' instead");

//以数组下标的形式来访问相应键的值

- (nullableObjectType)objectForKeyedSubscript:(KeyType)keyAPI_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

//利用block对字典进行遍历

- (void)enumerateKeysAndObjectsUsingBlock:(void(NS_NOESCAPE^)(KeyType key, ObjectType obj,BOOL*stop))blockAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//利用block对字典进行遍历(添加正序反序遍历)

- (void)enumerateKeysAndObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void(NS_NOESCAPE^)(KeyType key, ObjectType obj,BOOL*stop))blockAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//根据NSComparato参数条件排序

- (NSArray *)keysSortedByValueUsingComparator:(NSComparatorNS_NOESCAPE)cmptrAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//根据NSComparato参数条件排序

- (NSArray *)keysSortedByValueWithOptions:(NSSortOptions)opts usingComparator:(NSComparatorNS_NOESCAPE)cmptrAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//过滤的方法

- (NSSet *)keysOfEntriesPassingTest:(BOOL(NS_NOESCAPE^)(KeyType key, ObjectType obj,BOOL*stop))predicateAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//过滤的方法

- (NSSet *)keysOfEntriesWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL(NS_NOESCAPE^)(KeyType key, ObjectType obj,BOOL*stop))predicateAPI_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));

//根据文件创建字典

- (nullableNSDictionary *)initWithContentsOfFile:(NSString*)path;

//根据url创建字典

- (nullableNSDictionary *)initWithContentsOfURL:(NSURL*)url;

//将字典写进特定的路径path

- (BOOL)writeToFile:(NSString*)path atomically:(BOOL)useAuxiliaryFile;

//将字典写进特定的url

- (BOOL)writeToURL:(NSURL*)url atomically:(BOOL)atomically; 

//使用指定的以nil为结尾的对象与键对列表初始化列表

- (instancetype)initWithObjectsAndKeys:(id)firstObject, ...NS_REQUIRES_NIL_TERMINATION;

//使用另一个字典初始化字典

- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary;

//使用另一个字典初始化字典,还可以为每个对象创建新的副本

- (instancetype)initWithDictionary:(NSDictionary *)otherDictionary copyItems:(BOOL)flag;

//初始化

- (instancetype)initWithObjects:(NSArray *)objects forKeys:(NSArray> *)keys;

//从指定的URL读取存储在NSpRealType格式中的字典

- (nullableNSDictionary *)initWithContentsOfURL:(NSURL*)url error:(NSError**)errorAPI_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));

类方法:


//根据path路径获取字典信息

+ (nullableNSDictionary *)dictionaryWithContentsOfFile:(NSString*)path;

//根据url地址获取字典信息

+ (nullableNSDictionary *)dictionaryWithContentsOfURL:(NSURL*)url;

//创建字典并赋值

+ (instancetype)dictionaryWithObject:(ObjectType)object forKey:(KeyType)key;

//创建字典(根据不同编译环境)

#if TARGET_OS_WIN32

+ (instancetype)dictionaryWithObjects:(constObjectType_Nonnull[_Nullable])objects forKeys:(constKeyType_Nonnull[_Nullable])keys count:(NSUInteger)cnt;

#else

+ (instancetype)dictionaryWithObjects:(constObjectType_Nonnull[_Nullable])objects forKeys:(constKeyType_Nonnull[_Nullable])keys count:(NSUInteger)cnt;

#endif

+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...NS_REQUIRES_NIL_TERMINATIONNS_SWIFT_UNAVAILABLE("Use dictionary literals instead");

//创建字典并赋值一个字典

+ (instancetype)dictionaryWithDictionary:(NSDictionary *)dict;

//创建字典并通过数组赋值

+ (instancetype)dictionaryWithObjects:(NSArray *)objects forKeys:(NSArray> *)keys;

//从指定的URL读取存储在NSpRealType格式中的字典

+ (nullableNSDictionary *)dictionaryWithContentsOfURL:(NSURL*)url error:(NSError**)errorAPI_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0))NS_SWIFT_UNAVAILABLE("Use initializer instead");

//用来创建预订好的key集合,返回的值作为NSMutableDictionary的dictionaryWithSharesKeySet参数传入,可以重用key,从而节约copy操作,节省内存

+ (id)sharedKeySetForKeys:(NSArray> *)keysAPI_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

//创建字典,共享键集会复用对象

+ (NSMutableDictionary *)dictionaryWithSharedKeySet:(id)keysetAPI_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

二、NSMutableDictionary(可变字典)

概述:

和NSString和NSArray一样,NSDictionary对象是不可变。NSMutableDictionary继承至NSDictionary,允许我们随意添加、删除元素。

实例方法:


//删除字典对应key值的元素

- (void)removeObjectForKey:(KeyType)aKey;

//添加元素(anObject为要添加的元素,aKey为对应的key值)

- (void)setObject:(ObjectType)anObject forKey:(KeyType)aKey;

//初始化

- (instancetype)init NS_DESIGNATED_INITIALIZER;

//指定初始化函数

- (instancetype)initWithCapacity:(NSUInteger)numItemsNS_DESIGNATED_INITIALIZER;

- (nullableinstancetype)initWithCoder:(NSCoder*)aDecoderNS_DESIGNATED_INITIALIZER;

//字典拼接

- (void)addEntriesFromDictionary:(NSDictionary *)otherDictionary;

//删除字典

- (void)removeAllObjects;

//移除由keyArray的元素指定的key的所有数据

- (void)removeObjectsForKeys:(NSArray *)keyArray;

//设置字典内容为otherDictionary

- (void)setDictionary:(NSDictionary *)otherDictionary;

//前缀下标方法

- (void)setObject:(nullableObjectType)obj forKeyedSubscript:(KeyType)keyAPI_AVAILABLE(macos(10.8), ios(6.0), watchos(2.0), tvos(9.0));

//根据文件创建字典

- (nullableNSMutableDictionary *)initWithContentsOfFile:(NSString*)path;

//根据url创建字典

- (nullableNSMutableDictionary *)initWithContentsOfURL:(NSURL*)url;

类方法:


//初始化一个空间大小的字典(NSUInteger代表了开辟内存的一个单位)

+ (instancetype)dictionaryWithCapacity:(NSUInteger)numItems;

//根据文件获取字典信息

+ (nullableNSMutableDictionary *)dictionaryWithContentsOfFile:(NSString*)path;

//根据url地址获取字典信息

+ (nullableNSMutableDictionary *)dictionaryWithContentsOfURL:(NSURL*)url;

说明:

字典(也被称为散列表或关联数组)使用的是键查询的优化方式。它可以立即找出要查询的数据,而不需要遍历整个数组。对应大型的数据集来说,使用字典比数组要快得多,所以,这就是我们不用数组来存储然后查询的原因。

你可能感兴趣的:(OC集合类之NSDictionary、NSMutableDictionary(二))