02-NSArray、NSSet、NSDictionary 集合类

NSArray、NSSet、NSDictionary 集合类


可以用来装东西


OC数组只能存放OC对象、不能存放非OC对象类型,如int、struct\enu等

OC数组不能存放nil值

1.NSArray   不可变数组

1》.  NSArray
*array1 = [NSArray array]; // 由于是不可变数组,永远都是空数组

2》.  NSArray
*array2 = [NSArray arrayWithObject:@"whblap"];

3》.  NSArray
*array3 = [NSArray arrayWithObjects:@"whb",@"lap",nil]; //nil是数组元素        结束的标记

[array3 count]; //
计算数组元素个数

[array3 objectAtIndex:1]; // 可取到第二个元素 lap  == array3[0];

4》. 
快速创建数组对象     推荐使用,提高编码效率

NSArray *array4 =
@[@"whb",@"lap"];    // @ 是OC特有的关键字,代表创建一个对象
此处为创建一个OC数组对象  并且@只能创建不可变数组NSArray

2.数组遍历


1》. 普通遍历:

NSArray *array = @[@"whb",@"lap"];

for(int i= 0;i<array.count;i++){

NSLog(@"%@",array[i]);

}

2》. 快速遍历:

NSArray *array = @[@"whb",@"lap"];

for (id obj in
array)  // obj 代表着数组中的每一个元素

{

NSUInteger i = [array indexOfObject:obj]; //
找出obj元素在数组中的位置

NSLog(@"%ld ---- %@",i,
obj);

}

3》. block遍历:


[array enumerateObjectsUsingBlock:        
  //每拿到一个元素的时候就会调用一次block

^(id obj, NSUInteger idx,BOOL
*stop)      // obj是对应里面的元素
idx是对应的元素下标(即索引) 并且当前元素和索引位置当做参数传给block

{

NSLog(@"%ld ---
%@",idx,obj);

}];

3.NSMutableArray 可变数组

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"whb",@"lap",nil];

//添加元素

[array addObject:@"hello"];

// 删除所有元素

[array removeAllObjects];

// 删除指定的对象

[array removeObject:@"hello"];

[array removeObjectAtIndex:1];

// 打印数组

NSLog(@"%@",array);


1.NSSet集合


NSSet和NSArray的对比

1> 共同点

* 都是集合,都能存放多个OC对象

* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

* 本身都不可变,都有一个可变的子类

2> 不同点

* NSArray有顺序,NSSet没有顺序

2.NSMutableSet 可变集合


NSMutableSet *set = [NSMutableSet set]; //
空的集合对象

[set addObject:@"whb"];   // 添加某个元素个数

[set removeObject:@"whb"];   // 删除某个元素

NSString *str = [set anyObject];  //
随机取出某个元素

NSLog(@"打印随机取的元素 %@",str);


1. NSDictionary 不可变字典

字典特点:

key ----> value        索引 ----> 文字内容

里面存储的东西都是键值对

字典不允许有相同的key,但允许有相同的value(Object)

字典是无序的

// NSDictionary的创建

1》.NSDictionary
*dict = [NSDictionary dictionaryWithObject:@"whb",forKey:@"name"];

// NSDictionary *dict = [NSDictionary
dictionaryWithObjects:objects forKeys:keys];

2》.NSDictionary
*dict = [NSDictionary dictionaryWithObjectsAndKeys:

@"whb", @"name",

@"福建",
@"address",

@"841657484", @"qq",
nil];  // 这种一般不写,可用Xcode编译器特性,下面一段代码代替

3》.
NSDictionary *dict = @[@"name"
: @"whb",@"address" :
@"福建",@"qq"
: @"841657484"];  
// 推荐使用

// 利用key
查找对应的值

1》. id
obj = [dict objectforKey:@"name"];  //
不推荐使用

2》.
id obj = @[@"name"];  
  // 推荐使用   这行代码会自动转成上面那段代码

// 返回的是键值对的个数

NSLog(@"%ld", dict.count);


2.NSMutableDictionary 可变数组

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

//添加键值对

[dict setObject:@"value" forKey:@"Key"];

// 移除键值对

[dict removeObjectForKey:@"Key"];


3.字典的遍历

1》. 普通遍历

NSArray *keys = [dict allKeys];

for(int i = 0;i<dict.count;i++)

{

NSString *key =  keys[i]; //
取到每一个key

NSString *object = dict[key]; //根据key 查找对应的object

NSLog(@"%@ = %@", key,
object);

}

2》.block遍历:

集合小结:

和java对比:

NSArray    ====    ArrayList

NSSet      ====   
HashSet

NSDictionary ==== HashMap

1.NSArray\NSMutableArray

* 有序

* 快速创建(不可变):@[obj1, obj2, obj3]

* 快速访问元素:数组名[i]

2.NSSet\NSMutableSet

* 无序

3.NSDictionary\NSMutableDictionary

* 无序

* 快速创建(不可变):@{key1
: value1,  key2 : value2}

* 快速访问元素:字典名[key]

综合应用,LOOK下面代码:

NSArray *persons = @[

@{@"name"
: @"jack", @"qq" :
@"432423423", @"books":
@[@"5分钟突破iOS编程", @"5分钟突破android编程"]},

@{@"name" : @"rose", @"qq" : @"767567"},

@{@"name" : @"jim", @"qq" : @"423423"},

@{@"name"
: @"jake", @"qq" :
@"123123213"}

];

// NSDictionary *jim = persons[2];

NSString *bookName = persons[0][@"books"][1];

NSLog(@"%@", bookName);

//NSArray *array = persons[0][@"books"];

//NSLog(@"%@", array);

// 先取出1位置对应的字典

// 再取出字典中qq这个key对应的数据

//NSLog(@"%@", persons[1][@"qq"]);

// NSLog(@"%@", jim);

02-NSArray、NSSet、NSDictionary 集合类

时间: 2024-10-13 07:07:27

02-NSArray、NSSet、NSDictionary 集合类的相关文章

【IOS 开发】Objective-C Foundation 框架 -- 字符串 | 日期 | 对象复制 | NSArray | NSSet | NSDictionary | 谓词

一. 字符串 API 1. NSString 用法简介 (1) NSString API 介绍 NSString 功能 : -- 创建字符串 : 使用 init 开头的实例方法, 也可以使用 String 开头的方法; // init 开头方法创建字符串 unichar data[5] = {97, 98, 99, 100, 101}; NSString * str = [[NSString alloc] initWithCharacters : data length : 5]; // str

用法总结:NSArray,NSSet,NSDictionary-备用

Foundation framework中用于收集cocoa对象(NSObject对象)的三种集合分别是: NSArray 用于对象有序集合(数组)NSSet 用于对象无序集合      (集合)NSDictionary用于键值映射(字典)以上三种集合类是不可变的(一旦初始化后,就不能改变) 以下是对应的三种可变集合类(这三种可变集合类是对应上面三种集合类的子类):NSMutableArrayNSMutableSet  可修改的集合.主要用于集合运算(并集,交集,差集)NSMutableDict

iOS7: 漫谈基础集合类(NSArray,NSSet,NSOrderedSet,NSDictionary,NSMapTable,NSHashTable, NSPointerArray, NSIndexSet,NSCache, NSFastEnumeration)

基础集合类是每一个Mac/iOS应用的基本组成部分.在本文中,我们将对”老类”(NSArray, NSSet)和”新类”(NSMapTable, NSHashTable, NSPointerArray)进行一个深入的研究,探索每一个的效率细节,并讨论其使用场景. 提示:本文包含一些参照结果,但它们并不意味着绝对精确,也没有进行多个.复杂的测试.这些结果的目的是给出一个快速和主要的运行时统计.所有的测试基于iPhone 5s,使用Xcode 5.1b1和iOS 7.1b1,64位的程序.编译选项设

关于NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary

NSString,NSMutableString,NSArray,NSMutableArray,NSDictionary,NSMutableDictionary 在 OC 中我们天天都要用,而我们要怎么学习它们呢? 我认为学习这些常用的类,使用类比的方法就行了,只要学会一个类,就能类比另外两个类了.. 比如,NSString和NSMutableString的可变与不可变,主要区分的标准是,它们本身是不是可以变,可变的一般都能增,删,改,而不可变的方法主要是创建,查看,得到元素个数或者长度等等;

[BS-14] 打印NSArray和NSDictionary的3种方法

打印NSArray和NSDictionary的3种方法 NSArray *arr = @[@"奔驰",@"宝马",@"路虎",@"Tesla"]; //1.直接打印 NSLog(@"arr:%@",arr); //2.使用for...in遍历 for (NSString *str in arr) { NSLog(@"%@",str); } //3.使用枚举遍历 [arr enumerat

NSArray和NSDictionary添加空对象,以及nil和Nil和NULL和NSNull

因为在NSArray和NSDictionary中nil中有特殊的含义(表示列表结束),所以不能在集合中放入nil值.如要确实需要存储一个表示“什么都没有”的值,可以使用NSNull类. NSNull只有一个方法: + (NSNull *) null; nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空. 但是从数组取出NSNull对象不能和nil作比较,否则会出错,见这篇文章http://www.cocoachina.com/industry/20140424/8225

iOS 将NSArray、NSDictionary转换为JSON格式进行网络传输

http://blog.csdn.net/worldzhy/article/details/49982491 将NSArray.NSDictionary转换为JSON格式进行网络传输,是经常用到的,但是iOS没有提供方便的方法库.我们模拟一个实例,假设我们需要把一个自定义的一个模型(只有若干属性的Class)的数组转为一个JSON字符串,作为后端需要的一个参数传给后端,下面给出了实现方法: [objc] view plain copy //HSPictureModel数组转为json - (NS

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝分析

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝. 首先我们得知道什么是深拷贝,什么事浅拷贝. 简单点说深拷贝就是拷贝内容,浅拷贝就是拷贝指针. 上面那些类我们可以这样理解他们的深.浅拷贝.只要上面那些类中的NSString,NSArray,NSDictionary这三个类的实例化对象是调用copy方法进行拷贝那么他们拷贝的就是一个指针,就是说他们只是拷贝了一个指向

在Objective-C 中使用字符生成NSArray、NSDictionary、NSNumber

@符号不仅可以生成字符串,还可以生成其他数据类型如NSArray.NSDictionary和NSNumber,是一种简洁快速的用法. // NSArray array = [NSArray arrayWithObjects:a, b, c, nil]; array = @[ a, b, c ]; // NSDictionary dict = [NSDictionary dictionaryWithObjects:@[o1, o2, o3] forKeys:@[k1, k2, k3]]; dict