NSArray简单细说(七)—— 数组的比较和获得新数组

版本记录

版本号 时间
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
)

结论:简单容易很粗暴~~~

后记

未完,待续~~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容