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都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
随机推荐
- Bunch 转换为 HDF5 文件:高效存储 Cifar 等数据集
关于如何将数据集封装为 Bunch 可参考 关于 『AI 专属数据库的定制』的改进. PyTables 是 Python 与 HDF5 数据库/文件标准的结合.它专门为优化 I/O 操作的性能.最大限 ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之自签TLS证书及Etcd集群部署(二)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.服务器设置 1.把每一 ...
- [leetcode greedy]134. Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- map赋值前要先初始化:assignment to entry in nil map
注意这种map的嵌套的形式,make只初始化了map[string]T部分(T为map[int]int),所以下面的赋值会出现错误: test := make(map[string]map[int]i ...
- Django的orm中get和filter的不同
Django的orm框架对于业务复杂度不是很高的应用来说还是不错的,写起来很方面,用起来也简单.对于新手来说查询操作中最长用的两个方法get和filter有时候一不注意就会犯下一些小错误.那么今天就来 ...
- 解决同伴收获&解决同伴问题补分博客
解决同伴问题 要求: 查看同组同学的课堂笔记,尝试解决同伴的问题,格式如下: 我的同组同学是XXXX学号XXXX同学 同组同学的问题是XXXX 我理解他的意思是XXXX 他的问题我有一个小建议是XXX ...
- 拆分Cocos2dx 渲染项目 总结
因为只拆分了渲染的内容,所以代码只针对渲染部分进行分析. 代码涉及到这些类: CCImage,对图片的数据进行操作 CCNode,CCSprite,结点类 CCProgram,CCRenderer,C ...
- SlickOne敏捷开发框架介绍(一) -- 基于Dapper, Mvc和WebAPI 的快速开发框架
前言:在两年前(最初发布时间:2013年1月9日(csdn),当前文章时间2015年11月10日),项目组推出了基于Dapper,Mvc和WebApi的快速开发框架,随着后续Slickflow产品的实 ...
- VC获取屏幕分辨率及大小相关(转)
vc得到屏幕的当前分辨率方法: 1.Windows API调用 int width = GetSystemMetrics ( SM_CXSCREEN ); int height= GetSystem ...
- Polly简介 — 2. 弹性策略
和故障处理策略不同的是,弹性策略并不是针对委托执行过程中的异常进行处理,而是改变委托本身的行为,因此弹性策略并没有故障定义这一过程,它的处理流程为: 定义策略 应用策略 Polly对弹性策略也做了不少 ...