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. vwware虚拟机无法连接外网

    1.问题:动态IP时连接外网没有问题,但是将IP改为静态IP时发现没有办法连接外网 查看文件/etc/resolv.conf,里面的内容全部都被注释 [root@jenkins network-scr ...

  2. 8-1 Stacks of Flapjacks UVA120

    题意:  有一叠煎饼在锅里 n n<=30张  每张都有一个数字 代表它的大小    厨师每次可以选择一个数k  把从锅底开始数第k张上面的煎饼全部反过来  即原来的在上面的煎饼现在到了下面   ...

  3. 数据挖掘算法:关联分析二(Apriori)

    二.Apriori算法 上文说到,大多数关联规则挖掘算法通常采用的策略是分解为两步: 频繁项集产生,其目标是发现满足具有最小支持度阈值的所有项集,称为频繁项集(frequent itemset). 规 ...

  4. Wannafly挑战赛9 B - 数一数

    链接:https://www.nowcoder.com/acm/contest/71/B来源:牛客网 题目描述 设s,t为两个字符串,定义f(s,t) = t的子串中,与s相等的串的个数.如f(&qu ...

  5. 理解 Python 中的元类

    本文编程环境:Jupyter NoteBook python3 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在 Python 中这一点仍然成立: class Objec ...

  6. GPL、BSD和Apache开源许可证

    参考资料 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) 如何选择开源许可证? - 阮一峰的网络日志 开源许可证教程 - 阮一峰的网络日志 简介 自由软件许可证由FSF(Free ...

  7. POJ 3254 & POJ 1185(状压DP入门)

    Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 16773   Accepted: 8860 Desc ...

  8. C#拖拽操作

    C#的拖拽 本文将以Winform为例 有两个主要的事件: DragEnter 拖拽到区域中触发的事件 DragDrop 当拖拽落下的时候出发此事件 饮水思源 参考博客: http://www.cnb ...

  9. JQuery基础-DAY1

    jQuery介绍 是一个轻量级的js框架/库,其宗旨是write less do more. jQuery对象 js的对象叫做dom对象 使用jQuery框架产生的对象是jQuery对象,是对dom对 ...

  10. JavaSE基础之矩阵运算

    JavaSE基础之矩阵运算 1.矩阵类:Matrix.java 包括矩阵的加.乘运算,行列式的求解,最大最小元素等 package cn.com.zfc.help; import java.text. ...