zoukankan      html  css  js  c++  java
  • OC NSArray 数组

    OC NSArray 数组


    NSArray常用方法

    获取数组中第一位元素

    array.firstObject
    

    获取数组中最后一个元素

    array.lastObject
    

    获取数组中指定索引下标的元素

    [array objectAtIndex:1]
    

    字面量的写法

    array[1] //建议使用字面量写法,可读性好,高效
    

    判断数组中是否包含某一项

    - (BOOL)containsObject:(ObjectType)anObject;
    

    如果要判断自定义类的数组中是否包含某一项需要重写该类的 - (BOOL)isEqual:(id)object方法。

    - (BOOL)isEqual:(id)object {
        
        //判断对象
        if (self == object) {
            return YES;
        }
        //判断类
        if ([self class] != [object class]) {
            return NO;
        }
        
        Person * p = (Person *)object;
        //判断属性
        if (![_name isEqualToString:p.name]) {
            return NO;
        }
        if (_age != p.age) {
            return NO;
        }
        
        return YES;
    }
    

    数组的快速枚举

    for (NSString * string in array) {
        NSLog(@"%@",string);
    }
    

    数组的枚举器枚举

    NSEnumerator的nextObject方法可以遍历每个集合元素,结束返回nil,通过与while结合使用可遍历集合中所有项。
    对可变数组进行枚举操作时,不能通过添加或删除对象这类方式来改变数组容器。
    创建枚举:向容器类对象请求枚举器

    • (NSEnumerator * )objectEnumerator;
      反向枚举
    • (NSEnumerator * )reverseObjectEnumerator;
      浏览集合类对象的全部元素
    • (id)nextObject;

    例:

    NSEnumerator *enumerator = [array objectEnumerator];
    //NSEnumerator *enumerator = [array reverseObjectEnumerator];
    id anObject;
    while (anObject = [enumerator nextObject]) {
          NSLog(@"%@",anObject);
    }
    

    通过block块枚举

    [array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
         NSLog(@"%@,%ld",obj,idx);
         if (idx == 1) {
             *stop = YES;
         }
    }];
    

    给数组里的对象发送test消息

    [array makeObjectsPerformSelector:@selector(test)];
    

    根据对象返回索引值

    [array indexOfObject:@"c"];
    

    不可变数组后追加对象

    [array arrayByAddingObject:@"d"];
    

    给自定义对象的数组排序

    [array sortedArrayUsingSelector:@selector(compareAge:)];
    给自定义对象的数组排序需要声明并实现该对象的比较方法

    Person.h
    - (NSComparisonResult)compareAge:(Person *)p;
    
    
    Person.m
    - (NSComparisonResult)compareAge:(Person *)p {
        
        if (_age > p.age) {
            return NSOrderedDescending;
        } else if (_age < p.age) {
            return NSOrderedAscending;
        } else {
            return NSOrderedSame;
        }
    }
    

    sortedArrayUsingComparator 通过block自定义对象的数组排序

    NSArray * newArray =  [array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                
        Person * p1 = (Person *)obj1;
        Person * p2 = (Person *)obj2;
                
        if (p1.age > p2.age) {
              return NSOrderedAscending;
        } else if (p1.age < p2.age) {
              return NSOrderedDescending;
        } else {
              return NSOrderedSame;
        }
    }];
    

    NSMutableArray常用方法

    初始化

    [NSMutableArray array]
    

    追加元素

    [array addObject:@"1"];
    

    追加数组

    [array addObjectsFromArray:@[@"2",@"3"]];
    

    插入元素

    [array insertObject:@"0" atIndex:0];
    

    删除最后一项

    [array removeLastObject];
    

    删除指定对象

    [array removeObject:@"2"];
    

    删除指定索引下的对象

    [array removeObjectAtIndex:1];
    

    删除子数组

    [array removeObjectsInArray:@[@"0",@"1"]];
    

    根据索引替换数组中的对象

    [array replaceObjectAtIndex:1 withObject:@"a"];
    

    交换两个索引下的对象

    [array exchangeObjectAtIndex:0 withObjectAtIndex:2];
    

    覆盖原数组

    [array setArray:@[@"a",@"b",@"c"]];
    
  • 相关阅读:
    考在职还是全日制?
    ARP欺骗病毒攻击
    AutoCAD2006安装错误之解决
    WINCE下创建多个文件分区
    在WINCE5.0中应用CMD(比如运行PING命令)
    WinCE 应用程序开机自动方法
    Wince 添加中文字库
    WinCE内核裁减(中文字体)及字库和内核的分离(转)
    WINCE基于CH7024实现TV OUT (VGA)功能
    WINCE6.0 中文支持
  • 原文地址:https://www.cnblogs.com/xubaoaichiyu/p/5493323.html
Copyright © 2011-2022 走看看