Objective-C:NSArray的常见操作
NSArray不可变字符串的主要操作有:创建、枚举、排序、与NSString之间的相互转换
注意:
NSArray可以存对象,不可以存基本数据类型、结构体、数组、指针、nil、NULL
NSArray用nil作为结束标识符。
NSNull可以代表一个空对象。
整个操作还是通过代码来体现吧:
.h Person类的声明文件如下:
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property(nonatomic,copy)NSString* name;
@property(nonatomic,assign)NSInteger age;
+(Person*)personWithName:(NSString*)name andAge:(NSInteger)age;
-(id)initWithName:(NSString*)name andAge:(NSInteger)age;
-(NSComparisonResult)compareByName:(Person *)aPerson;//声明排序方式为通过姓名比较
-(NSComparisonResult)compareByAge:(Person *)aPerson;//声明排序方式为通过年龄比较
@end
.m Person类的实现文件如下:
#import "Person.h"
@implementation Person
+(Person*)personWithName:(NSString*)name andAge:(NSInteger)age
{
return [[Person alloc]initWithName:name andAge:age];
}
-(id)initWithName:(NSString*)name andAge:(NSInteger)age
{
self = [super init];
if(self)
{
_name = name;
_age = age;
}
return self;
}
-(NSString*)description//由于数组存储的是自定义的对象Person对象,所以复写description方法,将NSlog重新格式化输出
{
return [NSString stringWithFormat:@"name=%@,age=%ld",_name,_age];
}
-(NSComparisonResult)compareByName:(Person *)aPerson //返回一个selector选择器选择的比较方式,字符串比较默认为NSOrderAsecding
{
return [_name compare:aPerson.name];
}
-(NSComparisonResult)compareByAge:(Person *)aPerson//与上同理
{
if(_age > aPerson.age)
return NSOrderedDescending;
else if (_age < aPerson.age)
return NSOrderedAscending;
else
return NSOrderedSame;
}
@end
主函数测试如下:
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//NSArray测试
/*
NSArray可以存对象,不可以存基本数据类型、结构体、数组、指针、nil、NULL
NSArray用nil作为结束标识符。
NSNull可以代表一个空对象。
*/
//创建一个空对象
NSNull *nul = [NSNull null];
//在一个array中不要求只存相同类型的对象,可以存储任意类型的对象
NSArray *arr = @[@1,@"one",@"2",nul];
NSLog(@"%@",arr);
//枚举
NSEnumerator *enumerator = [arr objectEnumerator];
id obj;
while(obj = [enumerator nextObject])
{
NSLog(@"%@",obj);
}
//保存到文件中(必须是OC内置的对象,自定义的对象会出错)
[arr writeToFile:@"/Users/mac/Desktop/arr.txt" atomically:YES];
//读文件创建NSArray
NSArray *arr1 = [NSArray arrayWithContentsOfFile:@"/Users/mac/Desktop/arr.txt"];
NSLog(@"%@",arr1);
//排序
NSArray *arr2 = @[@2,@5,@1,@4,@3];
NSArray *sorted = [arr2 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sorted);
NSArray *arr3 = @[@"two",@"three",@"five",@"one",@"four"];
NSArray *sorted2 = [arr3 sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",sorted2);
//自定义对象的排序
NSArray *arrayperson = @[[Person personWithName:@"Tom" andAge:25],
[Person personWithName:@"Jobs" andAge:23],
[Person personWithName:@"Bill" andAge:26],
[Person personWithName:@"John" andAge:21]];
//按姓名排序
NSArray *sortedByName = [arrayperson sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@",sortedByName);
//按年龄排序
NSArray *sortedByAge = [arrayperson sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@",sortedByAge);
//NSArray和NSString
NSString *str = @"this is a test";
NSArray *words = [str componentsSeparatedByString:@" "];//分隔符
NSLog(@"%@",words);
NSString *str2 = [words componentsJoinedByString:@"-"]; //连接符
NSLog(@"%@",str2);
}
return 0;
}
测试结果如下所示:
-- ::39.772 -NSArray[:] (
,
one,
,
"<null>"
)
-- ::39.795 -NSArray[:]
-- ::39.796 -NSArray[:] one
-- ::39.797 -NSArray[:]
-- ::39.797 -NSArray[:] <null>
-- ::39.798 -NSArray[:] (null)
-- ::39.798 -NSArray[:] (
,
,
,
, )
-- ::39.799 -NSArray[:] (
five,
four,
one,
three,
two
)
-- ::39.799 -NSArray[:] (
"name=Bill,age=26",
"name=Jobs,age=23",
"name=John,age=21",
"name=Tom,age=25"
)
-- ::39.800 -NSArray[:] (
"name=John,age=21",
"name=Jobs,age=23",
"name=Tom,age=25",
"name=Bill,age=26"
)
-- ::39.800 -NSArray[:] (
this,
is,
a,
test
)
-- ::39.800 -NSArray[:] this-is-a-test
Program ended with exit code:
Objective-C:NSArray的常见操作的更多相关文章
- Objective-C:NSMutableArray类的常见操作
可变数组NSMutableArray的内容大小是可变的,因此它的常见操作无非增删该查, 具体一些就是:创建.添加.删除.替换.插入.清空等等.. // // main.m // 02-NSMuta ...
- 动态单链表的传统存储方式和10种常见操作-C语言实现
顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. ...
- C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- X-Cart 学习笔记(四)常见操作
目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...
- 转:jQuery 常见操作实现方式
http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...
- jQuery 常见操作实现方式
一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...
- C#路径/文件/目录/I/O常见操作汇总<转载>
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
- [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组
1.数组基础 1.什么是数组: 同一类型数据的集合,就是一个容器. 2.数组的好处: 可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式: (一 ...
- 【转】C#路径/文件/目录/I/O常见操作汇总
文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
随机推荐
- python opencv入门-形态学转换
目标: 学习不同的形态操作 例如 腐蚀.膨胀.开运算.闭运算 等. 我们要学习的函数有 cv2.erode(),cv2.dilate(),cv2.morphologyEx() 等. 原理 :一般对二值 ...
- MySQL用户授权 和 bin-log日志 详解和实战
看了上一篇博文的发布时间,到目前已经有三个月没更新博文了.这三个月经历了很多事情,包括工作.生活和感情等等.由于个人发展的原因,这个月准备换工作啦.在这段时间,我会把Web大型项目中所接触到的技术都总 ...
- react篇章-React State(状态)-数据自顶向下流动
<!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...
- BZOJ 2302: [HAOI2011]Problem c [DP 组合计数]
2302: [HAOI2011]Problem c Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 648 Solved: 355[Submit][S ...
- 友好的KVO
更友好的KVO 前言 观察者模式是大家在开发过程中每个人都要使用的一种设计模式,在iOS的开发流程中,KVO则是这一开发模式的主要实践手段,观察一个属性,当属性值发生变化的就能能够拿到这个属性的新.老 ...
- bzoj 2150 最小路径覆盖
最小路径覆盖问题是:给定一个DAG,该DAG的一个路径覆盖是一个路径的集合,使得每个点属于且仅属于其中一条路径,问题就是求一个大小最小的路径集合. 做法是将每个点A拆成两个点A1,A2,如果A-> ...
- JavaScript 继承和数组
前言 因为篇幅比较短,所以将JavaScript中的继承和数组进行统一写. 继承 当一个函数对象被创建的时候,Function构造器产生的函数对象会运行类似这样的代码: this.prototype ...
- CDOJ 42/BZOJ 2753 滑雪与时间胶囊 kruskal
2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1376 Solved: 487[Submit][St ...
- ZOJ 3623 Battle Ships DP
B - Battle Ships Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Subm ...
- cookie、sessionStorage、localStorage 详解
转自--http://www.cnblogs.com/fly_dragon/p/3946012.html cookie Cookie的大小.格式.存储数据格式等限制,网站应用如果想在浏览器端存储用户的 ...