字典: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();
}
[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 ;
}
字典:NSDictionary的应用举例的更多相关文章
- OC中的字典NSDictionary
========================== 字典 ========================== NSDictionary * dict = [[NSDictionary alloc] ...
- Foundation框架--字典( NSDictionary NSMutableDictionary )
基础知识 1.字典不允许相同的key,但允许有相同的value. 2,字典是无序的,字典不能排序. 3.字典里的内容是成对存在的,不会出现单数. 4.快速创建的方式只适合不可变字典. 不可变字典 #i ...
- iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转
iOS开发--字典(NSDictionary)和JSON字符串(NSString)之间互转 1. 字典转Json字符串 // 字典转json字符串方法 -(NSString *)convertToJs ...
- 字典NSDictionary以及NSMutableDictionary的用法总结
做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字map 吧,它可以将数据以键值对儿的形式储存起来,取值的时候通过KEY就可以直接拿到对应的值,非常方便.在Objective-C语言中 词典 ...
- IOS字典NSDictionary与NSMutableDictionary知识点
字典中的元素是以键值对的形式存储的,键值对的键和值,都是任意的对象,但是键往往使用字符串,字典存储对象的地址没有顺序,字典的遍历分为:键的遍历和值的遍历,字典与数组的区别:数组讲究顺序,而字典可以快速 ...
- iOS - 字典(NSDictionary)
1. 字典类型的常用处理 //---------------不可变字典 //1.字典的创建 NSArray *array1 = [NSArray arrayWithObjects:@"zha ...
- oc75--不可变字典NSDictionary
// // main.m // NSDictionary // // #import <Foundation/Foundation.h> int main(int argc, const ...
- 字典NSDictionary和NSMutableDictionary的使用
简介:字典是一种数据结构,字典里面的每一个元素,是一个key-value(键值对),key和value都是对象类型.同NSArray一样,里面的对象不用保持一致性. NSDictionary 1.字面 ...
- iOS/Objective-C开发 字典NSDictionary的深复制(使用category)
目标:把NSDictionary对象转换成NSMutableDictionary对象,对象内容是字符串数组,需要实现完全复制(深复制). 如果调用NSDictionary的mutableCopy方法, ...
随机推荐
- Java中的定时调度
Timer类是一个线程设施,用于实现在某个时间或者某一段时间后安排某个任务执行一次或者定期重复执行.需要与TimerTask配合使用. TimerTask类用来实现由Timer安排的一次或重复执行的某 ...
- php数据库两个关联大表的大数组分页处理,防止内存溢出
$ret = self::$db->select($tables, $fields, $where, $bind); if (!empty($ret)) { $retIds = array(); ...
- [收藏]NET技术+25台服务器怎样支撑世界第54大网站
.NET技术+25台服务器怎样支撑世界第54大网站 英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's ...
- JDK核心包学习
StringBuffer 线程安全.可变字符序列 StringBuilder 非线程安全.可变字符序列,比StringBuffer更快 Boolean 使用valueOf产生Boolean实例 ...
- Solr4.3之检索建议suggest
原文链接:http://www.656463.com/article/Efm26v.htm 很多才学solr的人,都容易把solr spellcheck和solr suggest混淆,误以为他们是一样 ...
- .Net程序员安卓学习之路6:等待条
一般在需要访问网络或者长时间操作的时候避免界面无响应才使用:等待条 本例将实现一个无框架的等待条,效果如下: 点击后,使线程Sleep5秒,就出现如下效果: 实现代码如: private Progre ...
- git push错误解决方案
错误提示: error: The requested URL returned error: 403 Forbidden while accessing https://nanfei9330@gith ...
- mac下配置和访问阿里云服务器(Ubuntu系统)
1.购买云服务器(http://www.aliyun.com/?spm=5176.3047821.1.1.vHFBuw) 注册帐号,在产品页面选择合适的服务器,进入详细页面选择配置,购买. 购买完成后 ...
- Spark Programming--Actions
first def first(): T first返回RDD中的第一个元素,不排序. 例子: count def count(): Long count返回RDD中的元素数量 例子: reduce ...
- Windows 服务器使用FTP出现“当前的安全设置不允许从该位置下载文件" 警告
为了安全,Windows服务器默认禁用了从网上下载文件的安全选项.此错误即是出现在这里,所以打开这个选项即可: 控制面板 —— Internet选项 ——安全 —— 找到“自定义级别” —— 找到“ ...