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. Docker简介与安装(一)

    Docker简介 Docker 是 Docker.Inc 公司开源的一个基于 LXC技术之上构建的Container容器引擎, 源代码托管在 GitHub 上, 基于Go语言并遵从Apache2.0协 ...

  2. 相等(==)、严格相等(===)、NaN、null、undefined、空和0

    (===)如果两个引用值指向同一个对象.数组.或函数,则他们是相等的.如果指向不同的对象,则他们是不相等的,尽管两个对象具有完全一样的属性. (==)如果其中一个值是true,则将其转换为1再进行比较 ...

  3. 使用chrales抓包IOS的https(pc+手机)

    1.安装SSL证书到手机 点击 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device 2. ...

  4. Adobe Photoshop CC 2017-18.0安装教程

    Adobe Photoshop CC 2017-18.0安装教程 注:下载链接在文章后面 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clou ...

  5. 世界杯:用Python分析热门夺冠球队-(附源代码)

    2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...

  6. JPG图片EXIF信息提取工具exif

    JPG图片EXIF信息提取工具exif   有相机生成的JPG图片(如照片)都包含有EXIF信息.这些信息包括拍照所使用的设备.地理位置.拍摄时间等敏感信息.Kali Linux内置了EXIF信息提取 ...

  7. dSploitzANTI渗透教程之修改MAC地址与Wifi监听器

    dSploitzANTI渗透教程之修改MAC地址与Wifi监听器 dSploitzANTI基本配置 渗透测试是一种安全性较大的工作.所以,在实施渗透测试之前进行一些简单设置.如修改MAC地址.了解网络 ...

  8. django中两张表有外键关系的相互查找方法,自定义json编码方法

    两张通过外键联系的表,如何在一张表上根据另一张表上的属性查找满足条件的对象集? 平常查找表中数据的条件是python中已有的数据类型,通过名字可以直接查找.如果条件是表中外键列所对应表的某一列,该如何 ...

  9. 我的vim配置脚本

    自己的VIM 配置脚本,拥有自主独立知识产权(参考了一点别人的),只使用了一个插件ctags ,主要实现了一下功能: 自动补全括号,双引号,单引号,包括{},(),"" , ''只 ...

  10. HDU 5715 XOR 游戏 二分+字典树

    XOR 游戏 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5715 Description 众所周知,度度熊喜欢XOR运算(XOR百科). 今天,它 ...