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的常见操作的更多相关文章

  1. Objective-C:NSMutableArray类的常见操作

    可变数组NSMutableArray的内容大小是可变的,因此它的常见操作无非增删该查, 具体一些就是:创建.添加.删除.替换.插入.清空等等.. // //  main.m //  02-NSMuta ...

  2. 动态单链表的传统存储方式和10种常见操作-C语言实现

    顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. ...

  3. C#路径/文件/目录/I/O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  4. X-Cart 学习笔记(四)常见操作

    目录 X-Cart 学习笔记(一)了解和安装X-Cart X-Cart 学习笔记(二)X-Cart框架1 X-Cart 学习笔记(三)X-Cart框架2 X-Cart 学习笔记(四)常见操作 五.常见 ...

  5. 转:jQuery 常见操作实现方式

    http://www.cnblogs.com/guomingfeng/articles/2038707.html 一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备 ...

  6. jQuery 常见操作实现方式

    一个优秀的 JavaScript 框架,一篇 jQuery 常用方法及函数的文章留存备忘. jQuery 常见操作实现方式 $("标签名") //取html元素 document. ...

  7. C#路径/文件/目录/I/O常见操作汇总<转载>

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

  8. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  9. 【转】C#路径/文件/目录/I/O常见操作汇总

    文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...

随机推荐

  1. CSUOJ 1224 ACM小组的古怪象棋

    Description ACM小组的Samsara和Staginner对中国象棋特别感兴趣,尤其对马(可能是因为这个棋子的走法比较多吧)的使用进行深入研究.今天他们又在 构思一个古怪的棋局:假如Sam ...

  2. Initramfs 原理和实践

    Linux系统启动时使用initramfs (initram file system), initramfs可以在启动早期提供一个用户态环境,借助它可以完成一些内核在启动阶段不易完成的工作.当然ini ...

  3. sklearn六大板块

    六大板块 分类 回归 聚类 数据降维 数据预处理 特征抽取 统一API estimator.fit(X_train,[y_train]) estimator.fit(X_train,[y_train] ...

  4. hdu 5251 包围点集最小矩形 ***

    题意:小度熊有一个桌面,小度熊剪了很多矩形放在桌面上,小度熊想知道能把这些矩形包围起来的面积最小的矩形的面积是多少. 求个凸包,矩形的边一定在凸包上,枚举边,求最大值,即为所求,多年不拍几何,直接套了 ...

  5. 在MacBook下安装http链接的性能测试工具httping

    一.如果没有brew,先安装brew. 安装命令如下:curl -LsSf http://github.com/mxcl/homebrew/tarball/master | sudo tar xvz  ...

  6. bzoj 2300 动态维护上凸壳(不支持删除)

    新技能GET. 用set保存点,然后只需要找前趋和后继就可以动态维护了. /************************************************************** ...

  7. A server is already running. Check /home/peter/stock/tmp/pids/server.pid. Exiting【Xshell 运行rails s 报错】

  8. codevs 1001 舒适的线路 kruskal/gcd

    舒适的线路 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://www.codevs.cn/problem/1001/ Description Z小 ...

  9. git服务端和客户端百度网盘下载地址

    https://pan.baidu.com/s/1BKw-bgYOrQjLkwUMzyH7KQ

  10. SpringMVC 方法参数设置

    /** 在方法中配置参数: (1) 内置对象配置: request:获取cookie.请求头... 获取项目根路径 request.getContextPath() response:用于ajax的输 ...