认识NSDictionary(字典)

翻译 2012年03月26日 20:35:23

      字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值。
      不同于数组,字典(也被称为散列表或关联数组)使用的是键查询的优化存储方式。它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。
      可使用dictionaryWithObjectsAndKeys来创建字典
      查询字典的值:objectForKey
      NSMutableDictionary的dictionary方法可以创建一个可变字典,也可以使用dictionaryWithCapaticy:。
      使用 setObject:forkey: 方法添加字典元素,如果关键字已存在,则用新植替换旧值。
      类似的,NSMutableDictionary类允许随意添加或删除字典元素。
      添加元素:setObject:forkey:
      删除元素:removeObjectForKey:
Example:


#import <Cocoa/Cocoa.h>
 
@interface MyClass : NSObject
{
     NSString *firstName;
     NSString *lastName;
 }
 
 
- (void) setFirstName:(NSString *)m_firstName;
- (NSString *) firstName;
 
- (void) setLastName: (NSString *) m_lastName;
- (NSString *) lastName;
 
 
@end

 
#import "MyClass.h"
 
 
@implementation MyClass
 
- (void) setFirstName:(NSString *)m_firstName{
    
    firstName = m_firstName;
}
- (NSString *) firstName{
 return firstName;
 }
 
- (void) setLastName: (NSString *) m_lastName{
     lastName = m_lastName;
 }
- (NSString *) lastName{
  return lastName;
}
 
 
- (NSString *) description
{   
 if (firstName == nil || lastName == nil) {
  return @"No Name found.";
     } else {
  return [NSString stringWithFormat:@"%@ %@",
             firstName,lastName];
     }
    
 }
 
@end



#import <Foundation/Foundation.h>
#import "MyClass.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
   
 // 创建字典:dictionaryWithObjectsAndKeys:
    MyClass *my1 = [MyClass new];
    MyClass *my2 = [MyClass new];
    MyClass *my3 = [MyClass new];
    MyClass *my4 = [MyClass new];
   
    NSDictionary *myClassDict;
    myClassDict = [NSDictionary dictionaryWithObjectsAndKeys:
              my1, @"my1",
              my2, @"my2",
              my3, @"my3",
              my4, @"my4", nil];
 // 获取值 objectForKey
    MyClass *sub = [myClassDict objectForKey: @"my3"];
 if (sub == nil) {
        exit(1);
    }
    [sub setFirstName:@"Elf"];
    [sub setLastName:@"Sundae"];
   
    NSLog(@"修改数据: %@",sub);
   
 // 遍历字典
    NSLog(@"***遍历字典myClassDict如下:");
 for (id key in myClassDict)
    {
        NSLog(@"key: %@ ,value: %@",key,[myClassDict objectForKey:key]);
    }
    NSLog(@"***遍历字典myClassDict结束。");
   
 // MARK: ***  添加新元素  ***   
 // NSDictionary无法添加或删除元素,可以使用NSMutableDictionary.
    NSMutableDictionary *myNewDict = [NSMutableDictionary dictionary];
 // 将原有字典添加到新字典的一对元素
 //[myNewDict setObject:myClassDic forKey:@"旧的不可变字典myClassDic"];
   
 // 遍历添加已有数据(原字典)
 for (id key in myClassDict)
    {
        [myNewDict setObject: [myClassDict objectForKey:key]
                  forKey:key];
    }
   
    NSString *newkey = @"newKey";
    NSString *newValue = @"This is a new Value.";
    [myNewDict setObject:newValue forKey:newkey];
   
 // 遍历myNewDict
    NSLog(@"***遍历字典myNewDict如下:");
 for (id key in myNewDict)
    {
        NSLog(@"key: %@ ,value: %@",key,[myNewDict objectForKey:key]);
    }
    NSLog(@"***遍历字典myNewDict结束。");
   
 // 删除元素
    [myNewDict removeObjectForKey: @"newKey"];
   
 // 遍历myNewDict
    NSLog(@"***遍历字典myNewDict如下:");
 for (id key in myNewDict)
    {
        NSLog(@"key: %@ ,value: %@",key,[myNewDict objectForKey:key]);
    }
    NSLog(@"***遍历字典myNewDict结束。");
   
    [pool drain];
 return 0;
}

 

// 输出结果(省略日期 时间等信息)
修改数据: Elf Sundae
***遍历字典myClassDict如下:
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.
***遍历字典myClassDict结束。
***遍历字典myNewDict如下:
key: newKey ,value: This is a new Value.
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.
***遍历字典myNewDict结束。
***遍历字典myNewDict如下:
key: my3 ,value: Elf Sundae
key: my4 ,value: No Name found.
key: my1 ,value: No Name found.
key: my2 ,value: No Name found.
***遍历字典myNewDict结束。


相关文章推荐

iOS--NSDictionary字典的初始化增删

8th,March,2016 Tuesday 简述 数组是有序的,字典集合是无序的。 1. 初始化 1) NSDictionary *dic = @{@"name":@"jolieyang",@"...

NSDictionary 字典类

字典是以键值对的形式存储数据的   key value  .    字典和数组都可以相互存储 1:创建字典,不可变的 NSDictionary *dic = [NSDictionary dicti...

【Objective-C】OC中字典基本概念和常用方法(NSDictionary和NSMutableDictionary)

一:字典的基本概念     Foundation中的字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合.正如,我们在字典里查找单词的定义一样. 通过...

iOS NSDictionary(字典)或者NSArray(数组)和JSON串的转换

//联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 在和服务器交互过程中,会iOS 字典或者数组和JSON串的转换,具体互换如下: // 将字典或者数组转化为J...

OC学习之道:OC对象,字典,集合的使用方法NSDictionary,NSMutableDictionary, NSSet,NSMutableSet,NSCountedSet

OC学习之道:OC对象,字典,集合的使用方法NSDictionary,NSMutableDictionary, NSSet,NSMutableSet,NSCountedSetint main(int ...

字典:NSDictionary

字典:NSDictionary   字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的集合NSDictionary在给定的关键字(通常是一个NSString)下存储一个数值(可...

IOS 中数组、集合、字典的使用(NSArray, NSSet, NSDictionary)

NSArray 用于对象有序集合(数组) NSSet 用于对象无序集合(集合) NSDictionary用于键值映射(字典) 以上三种集合类是不可变的(一旦初始化后,就不能改变) 以下...

修正我关于NSDictionary字典存储的那一篇文章

在上一篇文章中我试图去探究NSDictionary的存储方式,以为找到了新大陆。结果,今天再次测试时发现结果大相径庭,对此被我误导的人表示一声道歉。 昨天我得出的结论是NSDictionary中的键...

【OC学习-19】NSDictionary字典对象的初始化以及常用操作方法归纳

字典主要特征是一对一对的key和value组成,它的分类以及针对元素的操作和NSString以及NSArray的都差不多。重点在于了解一遍,具体做项目时再加深理解。...

OC-字典常用操作(NSDictionary、NSMutableDictionary)

字典是关键字及其定义的集合 NSDictionary能在给定得关键字key(通常是一个NSString字符串)下存储一个数值value(可以是任意类型的Objective-C对象),然后你就可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:认识NSDictionary(字典)
举报原因:
原因补充:

(最多只允许输入30个字)