ios 数组和字典
一.数组. 数组只能存放对象类型的数据 2.数组中的对象是有序的 (index)
(一)可变数组 NSArray:NSObject 不可变数组 作用:容器类 存放的是对象类型的数据,不可变数组,创建的时候是什么样就是什么样,不能对数组做插入、修改、删除等操作.
1.存数据
NSArray *arr1 =[[NSArray alloc]initWithObjects:@"zhangSan",@"liSi",@"小红", nil];
也可以通过Array类中的+方法创建
NSArray *arr4 =[NSArray arrayWithObjects:@"li",@"hh",@"ww", nil];
字面量方式创建数组 是不可变数组
NSArray *arr5 =@[@"hh",@"mm",@"ll"];
2.从数组中 取数据 根据索引来取 索引是从0开始
a. objectAtIndex:
NSString *name =[arr1 objectAtIndex:2];
b. 字面量方式取数据 数组[索引]
NSString *name2 =arr1[1];
arr1数组最大索引值为2,却去取索引为3的对象,程序就会崩溃 原因:数组越界
NSString *name3 = [arr1 objectAtIndex:3];
崩溃原因[__NSArrayI objectAtIndex:]: index 3 beyond bounds [0 .. 2]' 数组越界
(二.)NSMutableArray : NSArray 可变数组 增删改查
创建可变数组 并且初始化容量
capacity 容量
NSMutableArray *arr2 = [[NSMutableArray alloc]initWithCapacity:0];
1.添加对象
[arr2 addObject:@"tianQi"];
[arr2 addObject:@"yiFu"];
[arr2 addObject:@"haoRen"];
2.删除对象
删除某个对象
[arr2 removeObject:@"tianQi"];
删除某个索引下的对象
[arr2 removeObjectAtIndex:1];
删除所有对象
[arr2 removeAllObjects];
删除最后一个对象
[arr2 removeLastObject];
3.插入
在某个索引下插入对象
[arr2 insertObject:@"apple" atIndex:1];
4.替换更改
[arr2 replaceObjectAtIndex:1 withObject:@"orange"];
将不可变数组 转换 成可变数组
+ (instancetype)arrayWithArray: 是NSArray的方法
instacetype 哪个类调用该方法,就会返回哪个类类型的对象
NSMutableArray *arr3 =[NSMutableArray arrayWithArray:arr1];
[arr3 addObject:@"phone"];
数组是可以嵌套的
NSArray *arr8 = @[@"1",@[@"gg",@[@"100",@"pp",@[@"zhiyou",@"haoren"]]]];
(二.)字典 可变字典和不可变字典
NSDictionary : NSObject 不可变字典 容器 是无序的
键(key)-值(value) 只能存放对象类型
创建方式1:
NSDictionary *dic1 =[[NSDictionary alloc]initWithObjectsAndKeys:@"yuSan",@"productName",@"23.5",@"price",@"red",@"color", nil];
value1,key1,value2,key2...
字典输出样式
={
color = red;
price = "23.5";
productName = yuSan;
}
创建方式2:
NSDictionary *dic2 = [[NSDictionary alloc]initWithObjects:@[@"zhangSan",@"18"] forKeys:@[@"name",@"age"]];
创建方式3: 静态方法创建
NSDictionary *dic3 =[NSDictionary dictionaryWithObjectsAndKeys:@"qing",@"wether", nil];
创建方式4: 字面量的方式创建 是不可字典
NSDictionary *dic4 = @{@"carName": @"benChi",@"price":@"50wan"};
//获取字典中 对象的个数
NSLog(@"count====%lu",(unsigned long)dic4.count);
怎么从字典中取出对象? 根据key来取
1. objectForKey:
NSString *str = [dic4 objectForKey:@"carName"];
2. 字面量方式 字典[key]
NSString *price = dic4[@"price"];
//获取字典中的所有的键
NSArray *keyArr= dic4.allKeys;
//获取字典中的所有的值
NSArray *valueArr =dic4.allValues;
/**********可变字典 NSMutableDictionary*******/
// NSMutableDictionary : NSDictionary
//创建可变字典 初始化容量
NSMutableDictionary *dic5 =[[NSMutableDictionary alloc]initWithCapacity:0];
//添加 修改
[dic5 setObject:@"apple" forKey:@"fruit"];
[dic5 setObject:@"2.5" forKey:@"price"];
[dic5 setObject:@"heNan" forKey:@"place"];
[dic5 setObject:@"orange" forKey:@"fruit"];
//删除
//删除某个key下的对象
[dic5 removeObjectForKey:@"place"];
// [dic5 removeAllObjects];
// [dic5 removeObjectsForKeys:<#(NSArray *)#>]
NSDictionary *dic6 =@{@"heNan": @[@"000",@"111",@{@"666": @"333"}]};
(三).注意(以下在字典和数组中都存在)
NSDictionary *dic = @{@"key":value}
如果value是为nil 必将引发崩溃:
避免的方法
(1)在使用@{@”key”:value} 这种方式初始化的时候,一定要对value做是否为nil的判断,如果为ni,就不要加入Dictionary.
(2)使用标准的初始化方法:
NSDictionary dictionaryWithObjectsAndKeys:value1,@"v1",value2,@"v2",value3,@"v3", nil];
问题:
想使用 {key1:value1,key2 "",key3:value3} 但是要判断没个value 不能为nil;相当麻烦。而使用,initWithObjectsAndKeys:value1;不会崩溃,但是 系统会认为是末尾的nil,造成参数不完整。调试时难以发现。
ios 数组和字典的更多相关文章
- [BS-02] iOS数组、字典、NSNumber 新写法—— @[]、@{}
IOS数组.字典.NSNumber 新写法—— @[].@{} //标准写法 NSNumber * number = [NSNumber numberWithInt:]; NSArray * ar ...
- iOS - 数组与字典(NSArray & NSDictionary)
1. 数组的常用处理方式 //--------------------不可变数组 //1.数组的创建 NSString *s1 = @"zhangsan"; NSString *s ...
- iOS数组、字典与json字符串的转换
/*! * 将字典或者数组转化为JSON串 * * @param theData <#theData description#> * * @return <#return value ...
- iOS 数组和字典排序
一.数组排序 数组排序方式1: //初始化可变数组 NSMutableArray *arr1=[NSMutableArray arrayWithObjects:@"giu",@&q ...
- iOS 数组字典操作
iOS开发中需要大量对dictionary和array进行操作,因此我们需要一种更加安全可靠的操作方法来避免不必要的crash.当然可以通过自定义dictionary 和array重载增删改查的方法来 ...
- 窥探Swift之数组与字典
说到数组和字典,只要是编过程的小伙伴并不陌生.在Swift中的数组与字典也有着一些让人眼前一亮的特性,今天的博客就来窥探一下Swift中的Array和Dictionary.还是沿袭之前的风格,在介绍S ...
- Objective-C中把数组中字典中的数据转换成URL
可能上面的标题有些拗口,学过PHP的小伙伴们都知道,PHP中的数组的下标是允许我们自定义的,PHP中的数组确切的说就是键值对.而在OC我们要用字典(Dictionary)来存储,当然了Java用的是M ...
- 使用NSJSONSerialization将数组或字典转为字符串
IOS中将数组或字典转为字符串可以用NSJSONSerialization,代码如下: NSData* data = [NSJSONSerialization dataWithJSONObject:a ...
- OC中如何把数组中字典的数据转换成URL?
在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...
随机推荐
- MongoDB之增删改查
MongoDB的默认端口为:27017 show dbs 查看所有的数据库 MySQL和MongoDB的对应关系 MySQL MongoDB DB DB 数据库 table Collection ...
- 最近读jdk源码一些基础的总结(有待后续深入)
第一点:java.lang 1.Object类,hashCode()方法,equals()方法,clone()方法,toString()方法,notify()和notifyAll()方法,wait() ...
- ECMAScript6的原型
class Car { constructor(name){ this.name = name; } getName(){ } } class Ferrari extends Car{ constru ...
- Python: 浅淡Python中的属性(property)
起源:项目过程中需要研究youtube_dl这个开源组件,翻阅其中对类的使用,对比c#及Delphi中实现,感觉Python属性机制挺有意思.区别与高级编程语言之单一入口,在类之属性这一方面,它随意的 ...
- xcode 更新svn/Git后发现模拟器显示No Scheme问题
这个是由于XXX..xcodeproj包中xcuserdata文件夹中user.xcuserdatad文件夹名字的问题...user.xcuserdatad文件夹的名字,不是当前用户的名字,就会显示n ...
- swift 数组 的一些快速方法
1. filter (过滤器):返回符合条件的一个数组 let arr = [1,5,6,7,10,0] //写法1 let arr1 = arr.filter { (item) -> Bool ...
- MyBatis延迟加载和缓存(4)
一.项目创建 1.项目目录结构 2.数据库配置和上一篇的一样,这里不再描述.下面创建mybatis配置文件SqlMapConfig.xml <?xml version="1.0&quo ...
- 基于vue的悬浮碰撞窗口(用于打广告的)组件
由于项目需要改写了一个悬浮碰撞弹窗组件 <template> <div class="floatLayer"> <a class="clos ...
- DevExpress如何实现皮肤的添加及本地化
DevExpress.XtraBars.Helpers.SkinHelper类允许您填充现有RibbonGalleryBarItem或任意菜单(PopupMenu或BarSubItem)项目对应的De ...
- Java中方法的重写
★★前提:方法的重写建立在继承关系上★★ 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量. 所谓方法的重写是指子类中的方法与父类中继承 ...