您的位置:首页 > 移动开发 > IOS开发

ios开发系列之NSRange

2015-10-09 14:21 381 查看
//NSRange的定义可以理解为从location开始的length个元素
typedef struct _NSRange {
NSUInteger location; //表示对象开始的下标
NSUInteger length; //表示对象长度
} NSRange;


//创建NSRange的方法定义:
NSRange NSMakeRange(NSUInteger loc, NSUInteger len) {
NSRange r;
r.location = loc;
r.length = len;
return r; //返回一个NSRange类的对象
}


//返回location和length的和,也就是该range 下对象的最大一个下标加1(或者理解为在所取数据中的第max个元素,这里索引为0的为第一个元素)
NSUInteger NSMaxRange(NSRange range) {
return (range.location + range.length);
}


//判断所给的下标是否在range内
BOOL NSLocationInRange(NSUInteger loc, NSRange range) {
return (!(loc < range.location) && (loc - range.location) < range.length) ? YES : NO;
}


//判断两个range是否相等
BOOL NSEqualRanges(NSRange range1, NSRange range2) {
return (range1.location == range2.location && range1.length == range2.length);
}


//将2个range组合一起返回一个范围最大的NSRange对象(或者理解为 取原来2个range能取到下标最小的元素,直到原来2个range能取到下标最大的元素)
NSRange NSUnionRange(NSRange range1, NSRange range2);


//将一个range ( , )转换为字符串{ , }形式
NSString *NSStringFromRange(NSRange range);


//将一个字符串转成range,这个方法会扫描字符串,找到最前面的两个数,如果只有一个数字就将这个数字作为location.没有的话 location和length都为0.
NSRange NSRangeFromString(NSString *aString);


测试代码:

NSArray * array = [[NSArray alloc]initWithObjects:@"0",@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9", nil];
NSRange range = NSMakeRange(3, 3);
NSArray * newArray = [array subarrayWithRange:range];
NSLog(@"newArray ---%@",newArray); //newArray ---(3, 4, 5)
int x = NSMaxRange(range);
NSLog(@"x==%d",x);//x==6
BOOL is = NSLocationInRange(6, range);
NSLog(@"is====%d",is);//is====0
NSRange range2 = NSMakeRange(4,3);
NSRange rangeNew = NSUnionRange(range, range2);
NSArray * newArray1 = [array subarrayWithRange:rangeNew];
NSLog(@"newArray1111111_____%@",newArray1); //newArray1111111_____(3,4,5,6)
NSString * str1 = NSStringFromRange(range);
NSLog(@"str1====%@",str1);//str1===={3, 3}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: