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;

}

      测试结果如下所示:

2015-08-18 17:37:39.772 01-NSArray[1948:112551] (
    1,
    one,
    2,
    "<null>"
)
2015-08-18 17:37:39.795 01-NSArray[1948:112551] 1
2015-08-18 17:37:39.796 01-NSArray[1948:112551] one
2015-08-18 17:37:39.797 01-NSArray[1948:112551] 2
2015-08-18 17:37:39.797 01-NSArray[1948:112551] <null>
2015-08-18 17:37:39.798 01-NSArray[1948:112551] (null)
2015-08-18 17:37:39.798 01-NSArray[1948:112551] (
    1,
    2,
    3,
    4,
    5
)
2015-08-18 17:37:39.799 01-NSArray[1948:112551] (
    five,
    four,
    one,
    three,
    two
)
2015-08-18 17:37:39.799 01-NSArray[1948:112551] (
    "name=Bill,age=26",
    "name=Jobs,age=23",
    "name=John,age=21",
    "name=Tom,age=25"
)
2015-08-18 17:37:39.800 01-NSArray[1948:112551] (
    "name=John,age=21",
    "name=Jobs,age=23",
    "name=Tom,age=25",
    "name=Bill,age=26"
)
2015-08-18 17:37:39.800 01-NSArray[1948:112551] (
    this,
    is,
    a,
    test
)
2015-08-18 17:37:39.800 01-NSArray[1948:112551] this-is-a-test
Program ended with exit code: 0
时间: 2024-12-16 15:20:32

Objective-C:NSArray的常见操作的相关文章

Objective-C:NSMutableArray类的常见操作

可变数组NSMutableArray的内容大小是可变的,因此它的常见操作无非增删该查, 具体一些就是:创建.添加.删除.替换.插入.清空等等.. // //  main.m //  02-NSMutableArray // //  Created by ma c on 15/8/18. //  Copyright (c) 2015年 bjsxt. All rights reserved. // #import <Foundation/Foundation.h> int main(int arg

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

文件操作是程序中非常基础和重要的内容,而路径.文件.目录以及I/O都是在进行文件操作时的常见主题,这里想把这些常见的问题作个总结,对于每个问题,尽量提供一些解决方案,即使没有你想要的答案,也希望能提供给你一点有益的思路,如果你有好的建议,恳请能够留言,使这些内容更加完善. 主要内容:一.路径的相关操作, 如判断路径是否合法,路径类型,路径的特定部分,合并路径,系统文件夹路径等内容:二.相关通用文件对话框,这些对话框可以帮助我们操作文件系统中的文件和目录:三.文件.目录.驱动器的操作,如获取它们的

【代码学习】MYSQL数据库的常见操作

============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服务器位置 -u:数据库的用户名 -p:数据库的密码 1 mysql -u 用户名 -p //连接数据库 2 密码 3 exit //关闭数据库 1 mysql_connect($host,$user,$password); //连接数据库 2 mysql_close() //关闭数据库 二.创建数据

杂【第一天】包括eclipse常见操作,程序调试模式

观看传智播客视频笔记,感谢 eclipse的常见操作: 1.当即热版本低于编译器版本是,会出现bad Vresion number in class file的错误: 2.快捷键: alt+/:模板键 ctrl+1:快速修复 ctrl+shift+o:导包 设置代码阿保存的时候自动格式化:windows->首选项->Java->Editor->save Actions 代码移动:alt+上下键 重置视图:window->reset perspective... 3.典型的字节

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

1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一旦创建,必须明确长度)          格式1:              元素类型   [ ]  数组名  =  new  元素类型  [元素个数即数组的长度]:              示例:int[] array = new int[5];          格式2:           

ArcGIS for Android地图控件的5大常见操作

原文地址: ArcGIS for Android地图控件的5大常见操作 - ArcGIS_Mobile的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/arcgis_mobile/article/details/7801467   GIS的开发中,什么时候都少不了地图操作.ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS Runtime SDK for

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

顺序线性表的优点:方便存取(随机的),特点是物理位置和逻辑为主都是连续的(相邻).但是也有不足,比如:前面的插入和删除算法,需要移动大量元素,浪费时间,那么链式线性表 (简称链表) 就能解决这个问题. 一般链表的存储方法 一组物理位置任意的存储单元来存放线性表的数据元素,当然物理位置可以连续,也可以不连续,或者离散的分配到内存中的任意位置上都是可以的.故链表的逻辑顺序和物理顺序不一定一样. 因为,链表的逻辑关系和物理关系没有必然联系,那么表示数据元素之间的逻辑映象就要使用指针,每一个存储数据元素

java实现二叉树的常见操作

本文转自:红客联盟 解释:程序调用自身的编程技巧叫做递归. 程序调用自身的编程技巧称为递归( recursion).递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不

数组常见操作_使用字母打印正三角形

数组常见操作: 使用字母打印正三角形 public class fifty { public static void main(String[] args) { char[] c = {'A','B','C','D','E','F','G'}; //要打印的行数 for(int i = 0;i<c.length; i++){ //打印每一行空格 for(int j = i; j<c.length-1; j++){ System.out.print(" "); } //打印每