Foundation框架—集合

一、NSArray和NSMutableArray

(一)NSArray不可变数组

(1)NSArray的基本介绍

NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。

C语言数组有一个缺点即数组中只能存放同种数据类型的元素。

OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等

OC数组实际是指针数组-oc对象是用指针指向的,数组实际存放的是指向oc对象的指针。

(2)NSArray的创建

     //实例方法
NSArray *array = [[NSArray alloc] init];
NSArray *array1 = [NSArray array]; NSArray *array1 = [[NSArray alloc] initWithObjects:@"",@"", nil];
NSArray *array3 = @[@"",@""];//见到的时候要认识,但不推荐使用。
NSArray *array2 = [[NSArray alloc] initWithArray:array1];
//打印数组
NSLog(@"array1:%@",array1);
NSLog(@"array2:%@",array2);
NSLog(@"array3:%@",array3); //类方法
NSArray *array1 = [NSArray arrayWithObjects:@"",@"",@"", nil];
NSArray *array2 = [NSArray arrayWithArray:array1];

(3)NSArray的访问

(4)NSArray的遍历

数组的遍历有以下几种方式:

首先创建一个数组

第一种方法:使用for循环遍历

Block遍历的深入研究:

每拿到一个元素,就传递给obj,就会调用一次block,并且把当前的元素和索引位置当做参数传递给block。

注意1:break只使用在两种场合,即switch和循环结构中。

注意2:stop参数用来停止遍历,其值若为YES,则停止。

(二)NSMutableArray可变数组

1.可变数组创建

     //实例方法
NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"",@"",@"", nil];
NSLog(@"array1 : %@",array1); NSMutableArray *array2 = [[NSMutableArray alloc] initWithArray:array1];
NSLog(@"array2 : %@",array2); NSMutableArray *array3 = [[NSMutableArray alloc] initWithCapacity:];
NSInteger lgth = [array3 count];
NSLog(@"%lu",lgth); NSMutableArray *array4 = [NSMutableArray array];
类方法
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"",@"",@"", nil];
NSLog(@"array1:%@",array1); NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];
NSLog(@"array2:%@",array2); NSMutableArray *array3 = [NSMutableArray arrayWithCapacity:];
NSLog(@"array3:%@",array3);

2.可变数组的使用 

     ()、操作可变数组元素
NSMutableArray *array1 = [[NSMutableArray alloc] initWithObjects:@"",@"",@"", nil];
NSInteger lgth = [array1 count];
NSLog(@"length:%lu",lgth);
NSLog(@"array1:%@",array1); [array1 addObject:@""];
// array1 addObjectsFromArray:<#(NSArray *)#>
lgth = [array1 count];
NSLog(@"length:%lu",lgth);
NSLog(@"array1:%@",array1); [array1 insertObject:@"" atIndex:];
lgth = [array1 count];
NSLog(@"length:%lu",lgth);
NSLog(@"array1:%@",array1); [array1 replaceObjectAtIndex: withObject:@""];
lgth = [array1 count];
NSLog(@"length:%lu",lgth);
NSLog(@"array1:%@",array1); [array1 removeObject:@""];
[array1 removeObjectAtIndex:];
array1 removeObject:<#(id)#> inRange:<#(NSRange)#>
[array1 removeLastObject];
[array1 removeAllObjects];
lgth = [array1 count];
NSLog(@"length:%lu",lgth);
NSLog(@"array1:%@",array1);

(1)NSMutableArray的基本使用

注意:NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法。

二、NSSet和NSMutableSet

(一)NSSet不可变集合

基本使用:

(二)NSMutableSet可变集合

基本使用:

(三)NSSet和NSArray的对比

(1)共同点:

1)都是集合,都能够存放多个对象

2)只能存放oc对象,不能存放非oc对象类型(如int等基本数据类型和结构体,枚举等)。

3)本身都不可变,都有一个可变的子类。

(2)不同点:

1)NSArray有顺序,NSSet没有顺序

三、NSDictionary和NSMutableDictionary

(一)NSDictionary不可变字典

(1)介绍

现实中的字典:根据索引找到具体的内容

OC中的NSDictionary:根据key找到value。里面存储的东西都是键值对。

(2)NSDictionary的创建

注意:快速创建字典是编译器特性。

(3)NSDictionary的访问

//根据值找key

[newDic1 allKeysForObject:@"price"];

         //OC字典
//NSDictionary和NSMutableDictionary
//键(key)-值(value) --->KVO设计模式,key-value-O** //关于字典,key-value的顺序。字典是无序的,数组是有序的。
//一对键值 是字典的一个元素
// NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"1800+",@"age",@"Mars",@"address",@"Alians",@"sex", nil];
// NSLog(@"dic1:%@",dic1);
//
// NSDictionary *dic2 = [[NSDictionary alloc] initWithDictionary:dic1];
// NSLog(@"dic2:%@",dic2);
//
// NSArray *objArr = @[@"Albert",@"M",@"China"];
// NSArray *keyArr = @[@"name",@"sex",@"country"];
// NSDictionary *dic3 = [[NSDictionary alloc] initWithObjects:objArr forKeys:keyArr];
// NSLog(@"dic3:%@",dic3); // NSDictionary *dic = [[NSDictionary alloc] initWithObjectsAndKeys:@"ET",@"name",@"18",@"age",@"ET",@"Type", nil];
// NSLog(@"dic:%@",dic); // NSString *valueForName = [dic objectForKey:@"sex"];
// NSLog(@"%@",valueForName);
// NSArray *objArr = [dic allValues];
// NSLog(@"objArr:%@",objArr); //ET
// NSArray *allKeysForObject = [dic allKeysForObject:@"ET"];
// NSLog(@"keyArr:%@",allKeysForObject);
//
// NSArray *allKeys = [dic allKeys];
// NSString *value0 = [dic objectForKey:[allKeys objectAtIndex:0]];
// NSString *value1 = [dic objectForKey:[allKeys objectAtIndex:1]];
// NSLog(@"value0:%@,value1:%@",value0,value1); // NSString *tempValue = [dic valueForKey:@"name"];
// NSLog(@"%@",tempValue); //可变字典
// NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];
// NSLog(@"%@",dic);
//
// NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"valueHeHeDa",@"key2", nil];
// [dic setValuesForKeysWithDictionary:tempDic];
// NSLog(@"%@",dic); // [dic setObject:@"value5" forKey:@"key1"];
// NSLog(@"%@",dic);
//
// [dic setObject:@"value3" forKey:@"key3"];
// NSLog(@"%@",dic);
//
// NSDictionary *tempDic = [[NSDictionary alloc] initWithObjectsAndKeys:@"value3",@"key3",@"value4",@"key4", nil];
// [dic setValuesForKeysWithDictionary:tempDic];
// NSLog(@"%@",dic);
//
// [dic removeObjectForKey:@"key1"];
// NSLog(@"%@",dic); // NSArray *keyArray = [NSArray arrayWithObjects:@"key3",@"key4", nil];
// [dic removeObjectsForKeys:keyArray];
// NSLog(@"%@",dic); // [dic removeAllObjects];
// NSLog(@"%@",dic); // NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];
//
// NSArray *dicKeys = [dic allKeys];
// NSInteger dicLength = [dicKeys count];
// NSLog(@"keys->length: %lu",dicLength);
//
// NSInteger realDicLength = [dic count];
// NSLog(@"straight: %lu",realDicLength);

(4)NSDictionary的遍历

(二)NSMutableDictionary可变字典

(1)NSMutableDictionary的基本使用

(2)NSMutableDictionary的使用注意

注意:这种快速创建的方式只适用于不可变字典。

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

三、字典数组(制作通讯录等)

 

   #import <Foundation/Foundation.h>

   int main()
{ // 字典数组
NSArray *persons = @[
@{@"name" : @"jack", @"qq" : @"", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
@{@"name" : @"rose", @"qq" : @""},
@{@"name" : @"jim", @"qq" : @""},
@{@"name" : @"jake", @"qq" : @""}
]; //
// NSDictionary *jim = persons[2]; //
NSString *bookName = persons[][@"books"][];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"]; //NSLog(@"%@", array); // 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]); // NSLog(@"%@", jim);
return ;
}

OC Foundation框架—集合的更多相关文章

  1. Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  2. 李洪强iOS开发之Foundation框架—集合

    Foundation框架—集合 一.NSArray和NSMutableArray (一)NSArray不可变数组 (1)NSArray的基本介绍 NSArray是OC中使用的数组,是面向对象的,以面向 ...

  3. iOS - OC Foundation 框架

    前言 框架是由许多类.方法.函数和文档按照一定的逻辑组织起来的集合,以使研发程序更容易. Foundation 框架:为所有程序开发奠定基础的框架称为 Foundation 框架. Cocoa :是指 ...

  4. OC Foundation框架—结构体

    一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...

  5. OC Foundation框架—字符串

    一.Foundation框架中一些常用的类 字符串型: NSString:不可变字符串 NSMutableString:可变字符串 集合型: 1) NSArray:OC不可变数组 NSMutableA ...

  6. [OC Foundation框架 - 22] 集合的内存管理

    A.集合的手动内存管理 NSArray addObject: 加入的元素执行一次retain removeObject: 被删除的元素执行一次release removeAllObjects: 所有元 ...

  7. [OC Foundation框架 - 21] NSSet集合 & 集合之间的转换

    A.NSSet 跟NSArray一样,不可变 NSArray 自然顺序 NSSet是无序的 NSSet不允许存入重复元素,可以用来过滤重复元素   也有可变的NSMutableSet   B.集合转换 ...

  8. [OC Foundation框架 - 20] 统计代码行数

    注意: 1.变量名和函数名不要混淆调用 2.不要对文件夹进行文件的操作,没有权限 3.递归调用注意初始化变量   // // main.m // CodeLineCount // // Created ...

  9. OC — (Foundation框架-NSDate)

    NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...

随机推荐

  1. 阿里云实现简单的运行 Django 项目

    首先申请一个阿里云账号,买一个阿里云服务器是必须的,对于一个学生来讲,按道理说,在不打折不搞活动的时候,价格还是蛮贵的,所以说,同志们,革命尚未成功,一定要挺住!!! 申请了阿里云,消费完毕,登录阿里 ...

  2. C++设计模式 之 “对象性能” 模式:Singleton、Flyweight

    “对象性能”模式 面向对象很好地解决了“抽象”的问题,但是必不可免地要付出一定的代价.对于通常情况来讲,面向对象的成本大都可以忽略不计.但是某些情况,面向对象所带来的成本必须谨慎处理. 典型模式 # ...

  3. 20165211 2017-2018-2 《Java程序设计》第2周学习总结

    20165211 2017-2018-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周,我学习了书本上二三两章的内容,以下是我整理的主要知识 第二章 基本数据类型与数 标识符 ...

  4. 关于即来即停app的功能

    Asmallpark软件接口文档说明 编码均采用UTF-8格式传输全部为http,POST请求状态码:200  操作成功    100  服务器异常,稍后再试  404  请求非法  402  数据库 ...

  5. Python3基础 str format 四舍六入五凑偶 保留一位小数

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. Linux 文件的权限

    备注 : -rw-r--r-- 第一个“-”不算 ,三个一组 这个就是 644   二.使用chown命令更改文件拥有者 在 shell 中,可以使用chown命令来改变文件所有者.chown命令是c ...

  7. 第十一章 非对称加密算法--DH

    注意:本节内容主要参考自<Java加密与解密的艺术(第2版)>第8章“高等加密算法--非对称加密算法” 11.1.非对称加密算法 特点: 发送方和接收方均有一个密钥对(公钥+私钥),其中公 ...

  8. [bzoj 1774][Usaco2009 Dec]Toll 过路费

    题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...

  9. php能干什么?

    什么是cookies 简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮 ...

  10. catalina.home与 catalina.base区别

    转载请注明出处: 以Tomcat6.0为例,其Tomcat目 录结构如下: bin (运行脚本) conf (配置文件) lib (核心库文件) logs (日志目录) temp (临时目录) web ...