版本记录
版本号 | 时间 |
---|---|
V1.0 | 2017.08.25 |
前言
NSArray
是集合类型中的一种,是OC中很重要的概念,这个是我们一定会用到的对象,下面我就继续由整体到细节,由简单到复杂的和大家说一下它的用法。感兴趣的可以看我写的上篇几篇。
1. NSArray简单细说(一)—— 整体了解
2. NSArray简单细说(二)—— 数组的创建
3. NSArray简单细说(三)—— 数组初始化
4. NSArray简单细说(四)—— 数组的查询与检索
5. NSArray简单细说(五)—— 数组中对象的查找
6. NSArray简单细说(六)—— 向数组中元素发送消息
一、- (ObjectType)firstObjectCommonWithArray:(NSArray<ObjectType> *)otherArray;
该方法的作用是:返回接收数组中包含的第一个对象,该对象等于另一给定数组中的一个对象。
下面我们看一下返回值:
- 返回接收数组中包含的等于
otherArray
中的对象的第一个对象。 如果没有找到这样的对象,返回nil。
还有几个问题需要注意:
- 此方法使用
isEqual:
检查对象是否相等。
下面看一下代码
- (void)demoFirstObjectCommonWithArray
{
NSArray *arr = @[@1, @2, @3];
NSArray *arr1 = @[@3, @4, @5];
id object = [arr firstObjectCommonWithArray:arr1];
NSLog(@"object = %@",object);
}
下面看输出结果
2017-08-25 18:01:03.461 JJOC[3743:79129] object = 3
结论:这个简单,但是我没用过。
二、- (BOOL)isEqualToArray:(NSArray<ObjectType> *)otherArray;
该方法的作用就是:数组之间的比较。
对于返回值,如果otherArray
的内容等于接收数组的内容,则为YES
,否则为NO
。
如果每个阵列中的每个数组都保持相同数量的对象,并且每个数组中的给定索引对象都满足isEqual:test
,则两个数组具有相同的内容。
下面我们看输出结果
- (void)demoIsEqualToArray
{
NSArray *arr = @[@1, @2, @3];
NSArray *arr1 = @[@1, @2, @3];
BOOL result = [arr isEqualToArray:arr1];
NSLog(@"result = %d",result);
}
下面看输出结果
2017-08-25 18:07:13.071 JJOC[4021:85472] result = 1
结论:简单,易用。
三、- (NSArray<ObjectType> *)arrayByAddingObject:(ObjectType)anObject;
该方法的作用就是:返回一个新数组,它将对象添加到数组结尾。这里还要注意:如果anObject
为nil,则会引发NSInvalidArgumentException
异常。
下面看一下代码
- (void)demoArrayByAddingObject
{
NSArray *arr = @[@1, @2, @3];
NSArray *resultArr = [arr arrayByAddingObject:@4];
NSLog(@"resultArr = %@", resultArr);
}
下面看输出结果
2017-08-25 18:18:26.772 JJOC[4279:94632] resultArr = (
1,
2,
3,
4
)
结论:还是很简单了。
四、- (NSArray<ObjectType> *)arrayByAddingObjectsFromArray:(NSArray<ObjectType> *)otherArray;
该方法的作用就是:返回一个新数组,它是接收数组的副本,其中包含在另一个数组中的对象添加到最后。
下面我们还是看代码
- (void)demoArrayByAddingObjectsFromArray
{
NSArray *arr = @[@1, @2, @3];
NSArray *arr1 = @[@4, @5, @6];
NSArray *resultArr = [arr arrayByAddingObjectsFromArray:arr1];
NSLog(@"resultArr = %@", resultArr);
}
下面看输出结果
2017-08-25 18:22:25.549 JJOC[4458:98558] resultArr = (
1,
2,
3,
4,
5,
6
)
结论:还是很简单了。
五、- (NSArray<ObjectType> *)filteredArrayUsingPredicate:(NSPredicate *)predicate;
该方法的作用就是:针对接收数组中的每个对象评估给定的谓词,并返回一个包含谓词返回true的对象的新数组。
下面我们看一下参数:
-
predicate
:用于评估接收数组元素的谓词。 -
result
:一个包含接收数组中对象的新数组,谓词返回YES。结果数组中的对象与接收器中的顺序相同。
下面我们看代码
- (void)demoFilteredArrayUsingPredicate
{
NSArray *array1 = [NSArray arrayWithObjects:@1,@2,@3,@5,@6,@7, nil];
NSArray *array2 = [NSArray arrayWithObjects:@4,@5, nil];
// 表示筛选array1在array2中的元素!YES!其中SELF指向filteredArrayUsingPredicate的调用者。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF in %@",array2];
NSArray *resultArr = [array1 filteredArrayUsingPredicate:predicate];
NSLog(@"resultArr = %@", resultArr);
}
下面看输出结果
2017-08-25 18:34:02.156 JJOC[4892:110336] resultArr = (
5
)
结论:还是很好理解的。
六、- (NSArray<ObjectType> *)subarrayWithRange:(NSRange)range;
该方法的作用就是:返回一个包含接收数组元素的新数组,该元素在给定范围指定的限制内。
下面还有很多需要注意:
- 如果范围不在接收数组的元素范围内,则会引发
NSRangeException
。例如,以下代码示例创建一个数组,其中包含在整数的前半部分中找到的元素(假定整数存在)。
NSArray *halfArray;
NSRange theRange;
theRange.location = 0;
theRange.length = [wholeArray count] / 2;
halfArray = [wholeArray subarrayWithRange:theRange];
下面我们还是看代码
- (void)demoSubarrayWithRange
{
NSArray *array1 = [NSArray arrayWithObjects:@1, @2, @3, @5, @6, @7, @8, @9, @10,nil];
NSArray *resultArr = [array1 subarrayWithRange:NSMakeRange(0, array1.count * 0.5)];
NSLog(@"resultArr = %@", resultArr);
}
下面看输出结果
2017-08-25 18:40:22.605 JJOC[5125:116269] resultArr = (
1,
2,
3,
5
)
结论:简单容易很粗暴~~~
后记
未完,待续~~~