NSDictionary的遍历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSDictionary的遍历相关的知识,希望对你有一定的参考价值。

参考技术A 一、 for循环快速遍历

-(void)dictFor

NSDictionary*dict=@@”k1”:@”v1”,@”k2”:@”v2”;

//遍历字典的所有key

for(id key in dict)



  id value=[dictobjectForKey:key];

 NSLog(@”%@=%@”,key,value);





二、 使用迭代器遍历

-(void)dictFor

 NSDictionary*dict=@@”k1”:@”v1”,@”k2”:@”v2”;

NSEnumerator *enumer=[dict keyEnumerator];

id key =nil;

while(key=[enumer nextObject])



  id value=[dictobjectForKey:key];

  NSLog(@”%@=%@”,key,value);





三、 使用block遍历字典

-(void)dictFor

  NSDictionary*dict=@@”k1”:@”v1”,@”k2”:@”v2”;

[dict enumeratorKeysAndObjectsUsingBlock:^(id key ,id obj ,BOOL

*stop)

NSLog(@”%@=%@”,key ,obj);

];

字典:NSDictionary的应用举例

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

 

#import <Foundation/Foundation.h>

@interface MyClass : NSObject
{
    NSString *firstName;
    NSString *lastName;
}
-(void) setFirstName:(NSString*)m_firstName;
-(NSString*)firstName;

-(void) setLastName:(NSString*)m_lastName;
-(NSString*)lastName;
@end

 

//
//  MyClass.m
//  Dictionary
//
//  Created by Aron-Mac-VM on 3/14/16.
//  Copyright (c) 2016 PQLabs. All rights reserved.
//

#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
//
//  main.m
//  Dictionary
//
//  Created by Aron-Mac-VM on 3/14/16.
//  Copyright (c) 2016 PQLabs. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "MyClass.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        MyClass *my1 = [MyClass new];
        MyClass *my2 = [[MyClass alloc]init];
        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:@"pan"];
        [sub setLastName:@"Sunde"];
        NSLog(@"mofiy the data: %@",sub);
        
        //遍历字典
        for(id key in myClassDict)
        {
            NSLog(@"key: %@, value: %@",key,[myClassDict objectForKey:key]);
        }
        //添加新元素
        //NSDictionary无法添加或者删除元素,可以使用NSMutableDictionary
        
        NSMutableDictionary *myNewDict = [NSMutableDictionary dictionary];
        
        //把原有的字典添加到新字典的一对元素
        [myNewDict setObject:myClassDict forKey:@"旧的不可变字典myClassDict"];
        
        //遍历添加已有数据(原字典)
        for(id key in myClassDict)
        {
            [myNewDict setObject:[myClassDict objectForKey:key] forKey:key];
        }
        NSString *newValue = @"This is a new Value";
        NSString *newKey = @"a new Key";
        [myNewDict setObject:newValue forKey:newKey];
        
        //遍历myNewDict
        NSLog(@"*********遍历字典myNewDict如下:");
        for(id key in myNewDict)
        {
            NSLog(@"Key: %@, value: %@",key,[myNewDict objectForKey:key]);
            
        }
        NSLog(@"*********遍历字典myNewDict Over:");
        //删除元素
        
        [myNewDict removeObjectForKey:@"a new Key"];
        for(id key in myNewDict )
        {
            NSLog(@"key: %@,value: %@",key,[myNewDict objectForKey:key]);
            
        }
        
    }
     
    return 0;
}

 

以上是关于NSDictionary的遍历的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 获取的 NSData 的奇怪响应

NSDictionary的遍历

递归遍历未知结构的NSDictionary

创建持久存储时 NSPersistentDocument 崩溃

循环遍历 NSDictionary 以创建单独的 NSArray

Swift - 如何遍历 NSDictionary