iOS学习之Object-C语言集合遍历和数组排序
// for 循环遍历数组
; i < array.count; i++) {
// 根据数组下标访问数组元素
NSString *str = [array objectAtIndex:i];
NSString *str1 = array[i];
// 两种访问方式
NSLog(@"%@", str1);
}
// for循环遍历字典
// 获取字典中所有的key值
NSArray *arr = [dict allKeys];
// 遍历keys数组,访问对应的object值
; i < arr.count; i++) {
// 通过下标获取每个key值
id obj = [dict objectForKey:arr[i]];
id obj = dict[arr[i]];
// 两种获取方式
NSLog(@"%@", obj);
}
// for循环遍历集合
// 取出集合中的元素存放在数组中
NSArray *setArray = [set allObjects];
; i < setArray.count; i++) {
// 两种存放方式
NSLog(@"%@", setArray[i]);
NSLog(@"%@", [setArray objectAtIndex:i]);
}
// 定义一个数组, 包含5个字符串对象, 倒序取出数组中所有元素, 并存储到另一可变数组中。
NSArray *array3 = [NSArray arrayWithObjects:@"zhangsan", @"lisi", @"wangwu", @"asd", @"wqe", nil];
NSMutableArray *marray = [NSMutableArray array];
NSLog(@"%@", array3);
; i >= ; i--) {
// [marray addObject:array3[i]];
marray = [array3 objectAtIndex:i];
NSLog(@"%@", marray);
}
// 遍历数组(正序)
// 正序的枚举器对象
NSArray *array1 = @[@"aCat", @"aDog", @"aFu", @"aMeng"];
NSEnumerator *arrayEnum = [array1 objectEnumerator];
id value = nil; // 存储数组中的元素对象
// 循环次数未知,所以判断value不为空就打印数据,如果value为空循环停止
while ((value = [arrayEnum nextObject])) {
NSLog(@"%@", value);
}
// 遍历数组(反序)
// 倒序的枚举器对象
NSEnumerator *arrayEnum1 = [array1 reverseObjectEnumerator];
id value1 = nil;// 存储数组中的元素对象
while ((value1 = [arrayEnum1 nextObject])) {
NSLog(@"%@", value1);
}
// 遍历字典
// 遍历到的是字典中的object值
// 字典中存放的数据是无序的,没有反向枚举
NSEnumerator *dictionaryEnum = [dict1 objectEnumerator];
id value2 = nil;
while ((value2 = [dictionaryEnum nextObject])) {
NSLog(@"%@", value2);
}
// 遍历集合
// 遍历到集合的每一个元素
// 集合中村粗的数据是无序的,没有反向枚举的概念
NSEnumerator *setEnum = [set1 objectEnumerator];
id value3 = nil;
while ((value3 = [setEnum nextObject])) {
NSLog(@"%@", value3);
}
// for...in遍历数组
NSArray *array =@[@"aMeng", @"aSha", @"aBen"];
NSDictionary *dict2 = @{
@"name" : @"aGen",
",
@"sex" : @"男",
@"hobby": @"nana"
};
NSSet *set2 = [NSSet setWithObjects:@"nana", @"zhouyuqi", @"shuaige", @"mengboy", @"王海", @"刘傲然", @"小强", nil];
for (NSString *string in array) {
NSLog(@"%@", string);
}
// for...in遍历字典(得到的是key)
for (NSString *key in dict2) {
// 通过key访问
// NSLog(@"%@", dict2[key]);
NSLog(@"%@",[dict2 objectForKey:key]);
}
// for...in遍历集合(得到的是集合的元素对象)
for (NSString *setString in set2) {
NSLog(@"%@", setString);
}
// 定义一个数组, 包含5个字符串对象, 取出数组中所有字符串, 并拼接生成一个新的字符串。
NSMutableArray *marrays = [NSMutableArray arrayWithObjects:@"abc", @"def", @"hig", @"klm" ,@"nop", nil];
NSMutableString *strings1 = [NSMutableString string];
for (NSString *value in marrays) {
NSLog(@"%@", value);
[strings1 appendString:value];
}
NSLog(@"%@", strings1);
// 使用 for...in... 完成:定义一个字典, 用于存储一个人的name, sex, age三个数据, for...in...遍历, 输出此人的name到控制台
NSMutableDictionary *dics = [NSMutableDictionary dictionaryWithObjectsAndKeys:", @"age", nil];
for (id value in dics) {
if ([value isEqualToString:@"name"]) {
NSLog(@"%@", [dics objectForKey:value]);
}
}
// 1.使用NSSrotDescriptor (排序描述符,相当于排序条件)
// 给排序的数组生成排序描述符
// 排序描述符由两个参数组成
// key(键):对于一个给定的集合,对应值的键位将对集合中的每个元素进行排序
// ascending:升序(YES),降序(NO)。
NSSortDescriptor *arraySortDes =[[NSSortDescriptor alloc]initWithKey:@"self" ascending:YES];
// 不可变的数组排序
[array sortedArrayUsingDescriptors:@[arraySortDes]];
for (NSString *obj in array) {
NSLog(@"%@", obj);
}
// 可变数组排序
[mArray sortUsingDescriptors:@[arraySortDes]];
for (NSString *str in mArray) {
NSLog(@"%@", str);
}
// 数组中存放自定义对象进行排序
NSSortDescriptor *arrayByNameSortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
personArray = [personArray sortedArrayUsingDescriptors:@[arrayByNameSortDes]];
for (id obj in personArray) {
NSLog(@"%@", obj);
}
NSSortDescriptor *arrayByNameSortDes = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
personArray = [personArray sortedArrayUsingDescriptors:@[arrayByNameSortDes]];
for (id obj in personArray) {
NSLog(@"%@", obj);
}
// 将personMarry按照姓名降序排列
NSSortDescriptor *mSortDes = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[personMarray sortUsingDescriptors:@[mSortDes]];
NSLog(@"%@", personMarray);
//2.数组排序,使用数组中两个元素比较的方法名排序
// 不可变数组
SEL sel = @selector(compare:);
array = [array sortedArrayUsingSelector:sel];
NSLog(@"%@", array);
// 可变的数组
[mArray sortUsingSelector:@selector(compare:)];
NSLog(@"%@", mArray);
// 数组元素是自定义类型的对象
// 不可变数组排序
// 方法是自己定义的
// 按照姓名比较
personArray = [personArray sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@", personArray);
personArray = [personArray sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", personArray);
[personMarray sortUsingSelector:@selector(compareByName:)]; NSLog(@"%@", personMarray);
[personMarray sortUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", personMarray);
iOS学习之Object-C语言集合遍历和数组排序的更多相关文章
- iOS学习16之OC集合遍历和数组排序
1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...
- iOS学习08之C语言内存管理
本次主要学习和理解C语言中的内存管理 1.存储区划分 按照地址从高到低的顺序:栈区,堆区,静态区,常量区,代码区 1> 栈区:局部变量的存储区域 局部变量基本都在函数.循环.分支中定义 栈区的内 ...
- iOS学习07之C语言指针
本次随笔主要是为了学习和理解C语言中的指针,指针树状图如下: 1.访问数据的两种方式 1> 直接访问:定义变量后,直接访问变量 ; printf("a = %d\n", a) ...
- 2018/1/8 学习汇总,kettle简单介绍,集合遍历方式的选择及原理,防止表单重复提交的后台解决方案
昨天因为当前这个二次开发项目的接近尾声,要求我们将生产环境数据库里的数据迁移到现在新的数据库来,但老数据库里是sqlserver而新数据库则是ORACLE,不仅仅面对着数据库数据类型结构不一致的问题, ...
- iOS 学习 - 6.Objective-C中的各种遍历(迭代)方式
说明:转自文顶顶 一.使用 for 循环 要遍历字典.数组或者是集合,for 循环是最简单也用的比较多的方法 -(void)iteratorWithFor { //////////处理数组////// ...
- 【IOS学习】【Swift语言】
基本语法: OS X playground 引入 import Cocoa IOS playground 引入 import UIKit 基本数据类型 let 定义常量 定义完成之后无法修改 var ...
- ios学习之旅---c语言函数
1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...
- iOS学习笔记---oc语言第五天
字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...
- IOS各种集合遍历效率对比
前言: 对于ios项目开发中总会遇见各种集合遍历,出于对各种遍历效率的好奇心,所以准备写个测试程序测试一下 首先:先声明一个NSMutableArray,测试数据量分别是1000条,10000条,10 ...
随机推荐
- JS ​ ZERO WIDTH SPACE
如上编码 ZERO WIDTH SPACE 在各个语言的表达. JS中使用 var b = a.replace(/\u200B/g,''); 来替换,去掉 ZERO WIDTH SPACE . ht ...
- Duilib学习笔记《05》— 消息响应处理
在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的 ...
- android ios 只能輸入數字 不能輸入小數點的 函數 cordova
andriod function numericsonly(ob) { var invalidChars = /[^0-9]/gi if (invalidChars.test(ob.value)) { ...
- Ax Grid 的显示根据用户的需求动态排序。
点击方向按钮上下移动记录. 设计思路. 以临时表TmpTable1举例. 在表中加一个real类型字段(eg:ColumnSeq)用于排序,给表建一个ColumnSeq字段的索引ColumnSeqId ...
- 【MVC】ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- hadoop-集群管理(2)——内存设置
http://www.cnblogs.com/yuechaotian/archive/2013/03/08/2949607.html 1. 内存 hadoop为各个守护进程(namenode,seco ...
- 必须会的SQL语句(四)删除和更新
1.删除 1)删除记录 Delete from 表名 where id ='xx' 2)删除所有数据,并回归初始化标识字段. Truncate table 表名 3)delete与 ...
- [转载]《C++0x漫谈》系列之:多线程内存模型
<C++0x漫谈>系列之:多线程内存模型 By 刘未鹏(pongba) 刘言|C++的罗浮宫(http://blog.csdn.net/pongba) <C++0x漫谈>系列导 ...
- RECT 数据结构
数据结构RECT定义了一个矩形的左上角和右下角的坐标 ? 1 2 3 4 5 6 7 8 typedef struct _RECT{ LONG left; LONG t ...
- [转载]AppSettings和ConnectionStrings的区别
AppSettings是ASP.NET1.1时期用的,在.NET Framework 2.0中,新增了ConnectionStrings. 1.<connectionStrings> &l ...