数组
知识点
1.NSArray
2.NSMutableArray
=========== NSArray 不可变数组 =================
1、OC数组和c数组的区别
1)NSArray是一个类,是任意类型对象地址的集合(存储对象的引用)
不能存放简单的基本数据类型(int, float, NSInteger…)
2)C数组时相同类型变量的有序结合,可以保存任意类型的数据
3)NSArray下标越界不会有警告,但是运行会直接报错
2、数组创建
1)如何创建一个空数组
(1)NSArray *array2 = [[NSArray alloc] init];
(2)NSArray *array2 = [NSArray array];
2)通过指定对象创建数组
//可以有多个对象
NSArray *array2 = [[NSArray alloc] initWithObjects:@"aaa",@"bbb", nil];
NSArray *array2 = [NSArray arrayWithObjects:@"aaa",@"bbb", nil];
//只能有一个对象
NSArray *array2 = [NSArray arrayWithObject:@"ccc"];
3)通过指定数组创建数组
(1)NSArray *newArray = [[NSArray alloc] initWithArray:old];
(2)NSArray * newArray = [NSArray arrayWithArray:old];
4)通过简单的方式创建数组
//@[] 快速创建数组
NSArray *array3 = @[@"333”,dog,@“444"];
3. NSArray * array = [str componentsSeparatedByString:@" "];
//component 组合, separate 分割
//分割原字符串,创建很多小子串,创建一个数组,存储小子串地址,返回数组地址
//原字符串不变
//利用分隔符拼接数组元素,生成新字符串
NSString * newStr = [array componentsJoinedByString:@"*"];
4.获取数组元素个数
NSUInteger count = [array3 count];
5.通过索引获取相应的元素
id obj = [array3 objectAtIndex:1];
id obj = array3[下标];
6.通过对象获取在数组中的索引
NSUInteger index = [array3 indexOfObject:@"444"];
7.取出数组的最后一个元素或者第一个元素
//取数组的第一个元素
[array3 firstObject];
array3[0];
[array3 objectAtIndex:0];
//取数组的最后一个元素
[array3 lastObject];
8.判断数组中是否包含某个元素
BOOL isContains = [array3 containsObject:@"4444"];
========= NSMutableArray可变数组 =============
1.NSMutableArray : NSArray
//凡是NSArray的方法,NSMutableArray都能用。
//凡是传参传NSArray*,也可以传NSMutableArray*
2.NSMutableArray的作用
//NSMutableArray是一个类;
//数组元素不能是基本数据类型(比如int);
//数组元素只能是对象的引用(指针);
//OC语言里引用和指针是一个概念
3.如何创建一个NSMutableArray
1)创建空数组
NSMutableArray *array = [[NSMutableArray alloc] init];
2)创建有对象的数组
NSMutableArray * array = [[NSMutableArray alloc] initWithObjects:@"data1",@"data2",nil];
4.可变数组添加元素
1)向可变数组里面添加元素
//添加一个对象(在数组里面最后一个对象后面添加)
[array addObject:对象];
2)如何向可变数组中插入一个元素
[array insertObject:@"nihao" atIndex:0];
3)重置数组
[array setArray:@[@"One", @"Two"]];
5.根据数组下标取值
NSString *firstObj = [array objectAtIndex:0];
6.取出数组元素个数
NSUInteger count = [array count];
7、如何删除元素
1)删除指定索引的元素
[array removeObjectAtIndex:下标];
2) 删除最后一个元素
[array removeLastObject];
3)根据指定对象来删除元素
[array removeObject: 要删除的元素];
4)删除所有元素
[array removeAllObjects];
8.替换元素
[array replaceObjectAtIndex:0 withObject:@"hello"];
9.交换两个元素
[array exchangeObjectAtIndex:0 withObjectAtIndex:1];
=========================================================
练习:
对数组@[@“aa”,@“bb”,@“cc”,@“dd”]进行逆序;
============= NSArray数组的遍历 ===========
1.通过下标遍历数组
for (int i = 0; i < [array count]; i++)
{
NSLog(@"%d-%@",i,array[i]);
}
2.快速枚举法(for in)
/*
for (数组里面的类型 in 遍历的数组) {
<#statements#>
}
*/
for (NSString *s in array)
{
}
3、NSEnumerator 枚举器
1)objectEnumerator消息
作用:正序输出所有元素
2)reverseObjectEnumerator消息
作用:逆序输出所有元素
//返回一个枚举器
NSEnumerator *enumerator = [array objectEnumerator];
//获取枚举器所有的元素
NSArray *a = [enumerator allObjects];
NSString *s = nil;
//nextObject指向第一个元素
s = [enumerator nextObject];
********************************************************************************************
字典
1.NSDictionary 类
2.NSMutableDictionary 类
********************************************************************************
//NSDictionary 和 NSMutableDictionary
//NSMutableDictionary : NSDictionary
//两个凡是
=========== NSDictionary不可变字典 ================
1、什么是字典(key-value)
字典是也是一种集合结构,功能与我们现实中的字典工具一样
2、字典的元素是什么
任意类型的对象地址构成键值对
3、什么是键值对
键值对是由key和value构成必须一一对应
键值对中的key必须保证是唯一的
4、字典的存储方式
字典是一种无序保存的集合
5、如何查找值
根据键值对中的key找到相应的值
数组(array):有序,不唯一,有索引
字典(Dictionary):无索引,有键值, 键不重复,对应的值可以重复
===================NSDictionary不可变字典====================
//创建字典对象
(1)创建空字典
NSDictionary *dic = [[NSDictionary alloc] init];
NSDictionary *dic = [NSDictionary dictionary];
(2)创建带有对象的字典
NSDictionary * dict = [[NSDictionary alloc]
initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three",
@"3", @"One", @"4", nil];
NSDictionary * dict2 = @{@"1" : @"One", @"2" : @"Two", @"3" :
@"Three"};
(3)通过传入键,返回值的地址,如果没有对应的键,返回nil
NSString * value = [dict objectForKey:@"3"];
NSString * value = dict[@"3"];
(4)返回键值对总数
NSUInteger count = [dict count];
(5)返回所有的键
NSArray * keys = [dict allKeys];
(6)返回所有的值
NSArray * values = [dict allValues];
==============NSMutableDictionary可变字典=======
//重置字典
[mutableDict setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three”}];
//增/或修改
[mutableDict setObject:@"Four" forKey:@"4"];
//删
//通过键删除值
[mutableDict removeObjectForKey:@"3"];
//删除所有键值对
[mutableDict removeAllObjects];
======================================
8、遍历字典内容
1)枚举器法:
<1>键的遍历:
keyEnumerator消息
作用:获取所有的key值
NSEnumerator *emunerator = [dict keyEnumerator];
while (id obj = [emunerator nextObject]) {
NSLog(@“%@“, obj);
}
<2>值的遍历
objectEnumerator 消息
2)快速枚举法:得到的是键
for (id key in dict)
{
NSLog(@“key — %@, value = %@, key, [dict objectForKey:obj]); // 得到了键就得到了值
}