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都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供 ...
随机推荐
- Tensorflow入门(安装)
TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统.主要用于深度学习(神经网络)方面的研究与应用.Tensorflow适用与Python.C++.Java,本博客中主 ...
- Flutter的原理及美团的实践
导读 Flutter是Google开发的一套全新的跨平台.开源UI框架,支持iOS.Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件.自从2017年5月发布第一个版本以来,目前 ...
- oneDay
难受过 迷茫过 失望过 耍脾气过 开心过 伤心过 疼过 走了这么久的路: 我只想说 程序的道路上 很难走: 本来准备都放弃了: 自己逼自己了很久想明白了: 不能什么时候都想着靠外力 自己的不足就是自己 ...
- WS快捷键
打开文件: Ctrl + Shift + N 打开类: Ctrl + N 打开函数: Ctrl + F12 “超级”打开: 双击 shift,可以 search anywhere. 复制整行: Ctr ...
- JavaScript数据类型学习脑图:
- bzoj 3672 利用点分治将CDQ分治推广到树型结构上
最大的收获就是题目所说. deal(s) : 处理节点s所在块的问题,并保证: 1.s是该块中最靠近根节点的点,没有之一. 2.s所在块到根节点的路径上的点全都用来更新过了s所在块的所有节点. 然后步 ...
- JS判断图片上传时文件大小和图片尺寸
如何读取图片的size: 首先,原生input file控件有个files属性,该属性是一个数组.数组中的元素有以下属性:lastModifiedDate,name,size,type,webkitR ...
- 读书笔记_Effective_C++_条款三十六:绝不重新定义继承而来的non-virtual函数
这个条款的内容很简单,见下面的示例: class BaseClass { public: void NonVirtualFunction() { cout << "BaseCla ...
- python编译模块为2禁制
编译模块为2禁制yum -y install python26-setuptoolseasy_install -U setuptools# cd /usr/lib64/python2.6# easy_ ...
- C/C++服务器开发的必备利器–libconfig
http://www.leoox.com/?p=311 程序肯定需要一份配置文件,要不然,自己的程序不是“可配置”的,自己都不好意思往“高大上”靠拢.言归正传,以前自己写代码,配置文件的读写都是各式各 ...