zoukankan      html  css  js  c++  java
  • iOS 判断数组array中是否包含元素a,取出a在array中的下标+数组方法详解

    目前找到来4个解决办法,第三个尤为简单方便

    /////////1111111
    
        NSArray * arr = @[@"1",@"2",@"3",@"4",@"5"];
        //是否包含
        if ([arr containsObject:@"3"]) {
            
            NSInteger index = [arr indexOfObject:@"3"];
            NSLog(@"-1---%ld---",index);
        }
        
        //输出是  2
        
    
    
        //////////22222222
    
        if ([arr indexOfObject:@"5"] != NSNotFound) {
            
            NSInteger inde =[arr indexOfObject:@"5"] ;
            NSLog(@"-2---%ld----",inde);
    
        }else{
            
            NSLog(@"不存在");
        }
        
        
        //////22222---->>>>3333333
        
        NSInteger inde =[arr indexOfObject:@"5"];
    
        if (inde != NSNotFound) {
          
            NSLog(@"-2---%ld----",inde);
            
        }else{
            
            NSLog(@"不存在");
        }


    ///////44444 用for in 来判断

    数组详细方法一

    下面的例子以 
        NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany", nil];
    1、获取数组中总共有多少个对象。
    - (NSUInteger)count;
        NSLog(@"%d",[array count]);   2
    2、获取数组中下标对应的元素对象.(下标是从0开始)
    - (id)objectAtIndex:(NSUInteger)index;
    
    3、在当前数据中追加一个新的对象,并且返回一个新的数据对象(新的数组对象和被追加的对象,是两个不同的数组对象)。
    - (NSArray *)arrayByAddingObject:(id)anObject;
    4、在当前的数组中追加一个新的数据,并且返回一个新的数组对象。
    - (NSArray *)arrayByAddingObjectsFromArray:(NSArray *)otherArray;
    5、使用当前的数组生成一个字符串,新生成的字符串使用提供的separator 字符进行分割。
    - (NSString *)componentsJoinedByString:(NSString *)separator;
    [array compontsJoinedByString:@","];
    运行结果: wendy,andy,tom,jonery,stany
    6、检测数据中是否包含指定的对象元素
    - (BOOL)containsObject:(id)anObject;
    [array containsObject:@"tom"]; YES
    7、使用当前的数组生成字符串。可以重写description 改变生成的字符串。相当于Java 中的toString 方法。
    - (NSString *)description;
    运行结果
     (
        wendy,
        andy,
        tom,
        jonery,
        stany
    )
    8、根据设置的locale 进行连接数组
    - (NSString *)descriptionWithLocale:(id)locale;
    
    
    - (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level;
    
    
    9、两个数组的第一个元素是否相同,如果相同,则返回 数组中,第一个元素的字符串,反之,返回null 对象
    - (id)firstObjectCommonWithArray:(NSArray *)otherArray;
    10、 从数组中获取 NSRange 对象的数据存放到objects 中,NSRange 的数据标示从location,开始后面length 个数据
    - (void)getObjects:(id__unsafe_unretained [])objects range:(NSRange)range;
    
    
        NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"jonery",@"stany",@"张山名称",@"asdta", nil];
        
        NSRange range = NSMakeRange(1, 5);
        
        id *objects;
        
        objects = malloc(sizeof(id) * range.length);
        
        [array getObjects:objects range:range];
        
        for(int i = 0; i < range.length; i++){
            NSLog(@"%@",objects[i]);
        }
        
        free(objects);
        
        运行的结果
        
    andy
    tom
    jonery
    stany
    11、 判断制定的anObject 对象是否存在数组中如果存在返回,对象所在的下标
    - (NSUInteger)indexOfObject:(id)anObject;
    如果不存在,返回的NSUInteger 与 NSNotFund 相同
    NSUIndex index = [array indexOfObject:@"stan"];
    if(index == NSNotFound)
    {
    对象不在数组中        
    }
        
    11-1、 判断制定的元素,是否在数组中,数组查询的位置,是从range.location 的位置开始,到range.length 的长度结束。
    - (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range;
    如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。
    实质是使用isEqual 进行比较
    
    
    12、
    同上面两个方法一项,测试指定的对象是否在数组中不同的是,这里使用指针进行比较
    - (NSUInteger)indexOfObjectIdenticalTo:(id)anObject;
    如果数据存在,返回指定的下标,如果不存在,则返回NSNotFund 。
    - (NSUInteger)indexOfObjectIdenticalTo:(id)anObject inRange:(NSRange)range;
    
    
    13、比较两个数组是否相同 ,数组长度相同,并且相同位置上的元素也相同。
    - (BOOL)isEqualToArray:(NSArray *)otherArray;
    14、返回最有一个元素,如果一个数组的长度为0 返回的对象为nil
    - (id)lastObject;
    15、使用数组返回一个 NSEnumerator 对象,这个对象类似与一个指针,可以用来遍历 整个数组 指针从前向后遍历
    - (NSEnumerator *)objectEnumerator;
    示例如下
        NSEnumerator *enu = [array objectEnumerator];
        
        id *obj;
        while (obj = enu.nextObject) {
            NSLog(@"obj===%@==",obj);
        }
    16、 返回一个NSEnumerator 对象,这个对象类似一个指针,可以用来遍历真个数据,所不同的是,这个指针,是从后向前遍历。    
    - (NSEnumerator *)reverseObjectEnumerator;
    17、生成一个NSData 的对象,主要是用来进行数组的排序。 在下面的方法中使用这个对象
    - (NSData *)sortedArrayHint;
    18、 进行数组的排序
    - (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id,id, void *))comparator context:(void *)context;
    这个方法类似苹果实现了一个简单的 排序方法。但是实现的规则需要自己进行处理。
    类似的方法如下。 首先提供一个 普通的排序算法,函数和c 的方法类似
    NSInteger sortType(id st,id str,void *cha)
    {
        NSString *s1 = (NSString *)st;
        NSString *s2 = (NSString *)str;
    
    
        if(s1.length > s2.length)
        {
            return NSOrderedAscending;
        }else if(s1.length < s2.length)
        {
            return NSOrderedDescending;
        }
        
        return NSOrderedSame;
    }
    
    
       NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
       
       NSArray *a = [array sortedArrayUsingFunction:sortType context:nil];
    
    NSLog(@"a=%@",a);
    NSArray 为需要排序的数组,返回一个排序完成的数组,再执行osrtedArrayUseingFunction 方法时会,会自动调用上面的sortType 方法,并且,可以按照你
    的需要调整上面的规则
    
    
    19、和上面的方法类似,也是苹果用来进行排序的。所不同的是,需要传入一个NSData 的数据。
    - (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id,id, void *))comparator context:(void *)context hint:(NSData *)hint;
    
    
        NSData *dat = [array sortedArrayHint];
        NSArray *a = [array sortedArrayUsingFunction:sortType context:nil hint:dat];
        
        NSLog(@"a=%@",a);
        
    数组详细方法:数组是否相同,排序。。。

    数组详细方法二:遍历,数组与数组

    20、   - (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
    这是用来排序的函数,comparator 这个参数,需要传入一个返回结果是NSComparisonResult 的函数,
    主要的函数,类似的函数如下:
    - (NSComparisonResult)compare:(NSString *)string;
    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask;
    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange;
    - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale; 
    - (NSComparisonResult)caseInsensitiveCompare:(NSString *)string;
    - (NSComparisonResult)localizedCompare:(NSString *)string;
    - (NSComparisonResult)localizedCaseInsensitiveCompare:(NSString *)string;
    都可以进行调用
    以 localizedCompare: 函数为例进行调用
    
    
    NSArray *arr = [[NSArray alloc] initWithObjects:@"test", @"abc", @"xyz", nil];
        NSLog(@"Befor sort:%@", arr);
        SEL sel = @selector(localizedCompare:);
        arr = [arr sortedArrayUsingSelector:sel];
        NSLog(@"After sort:%@", arr);
        得到的结果是:
    abc,
    test,
    xyz
    
    
    21、用来获取数组中range.location 开始,数据各数 为range.length 的数据,并放置到一个新的数组中
    以数组 为例  
    NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
    - (NSArray *)subarrayWithRange:(NSRange)range;
    如:
    NSArray *test = [array subarrayWithRange:NSMakeRange(2, 2)];
    tom,
    test
        注意range 的数值不要越界。
    22、写入数组中的数据,到指定path 的目录中:
    参数:atomically 是否把文件保存到辅助文件中
    - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
    
    
    
    
    23、如同上面的方法一样,所不同的是写入数组中的内容到 网上指定的路径。
    - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
    
    
    
    
    24、这个方法的实现类似于,数组中的元素,都是类对象,aselector 是这些类中的无参方法。
    - (void)makeObjectsPerformSelector:(SEL)aSelector;
    调用例子如下:
        首先新建一个ObjectTest 的类,在其中实现一个 无参数方法 - (void)tttttt
        在这个方法的实现中可以打印一些日志
        - (void)tttttt
    {
    NSLog(@"==========asasdfasdfasdfas===========");
    }
    
    
    
    
        NSArray *array = [NSArray arrayWithObjects:[[[ObjectTest alloc] init] autorelease],[[[ObjectTest alloc] init] autorelease], nil];
    
    调用格式如下,      
        [array makeObjectsPerformSelector:@selector(tttttt)];
        
        这时就可以看到打印的日志信息了。
    25、这个方法的调用和上面一个方法类似,所不同的是这个对象调用的方法是一个可以带参数的方法。参数的类型是id ,也就是可以是任意的类型。
    - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;
    
    
    26、  用来根据indexes 获取一个数组, NSIndexSet 是一个用来管理 index 的对象。
    - (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;
    
    
    例子如下:
       NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
     
        //NSIndexSet *se = [NSIndexSet indexSetWithIndex:0];
        或者是
        NSIndexSet *se = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(2, 2)];
        
        NSArray *test = [array objectsAtIndexes:se];
        NSLog(@"%@",test);
    
    
    27、返回指定下标的一个对象。这个方法类似 objectAtIndex:
    - (id)objectAtIndexedSubscript:(NSUInteger)idx
    
    
    28、使用block 块遍历整个数组。这个block 需要三个参数,id obj 表示数组中的元素。
    NSUInteger idx 标示元素的下标,
    bool *stop 是一个bool类型的参数。 官方描述如下:
    A reference to a Boolean value. The block can set the value to YES to stop further processing of the array. 
    The stop argument is an out-only argument. You should only ever set this Boolean to YES within the Block.
    - (void)enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block 
    调用例子如:
    
    
    NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
    
    
       [array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){
           NSLog(@"%@,%d",str,index);
       }];
    29、同上面的方法一项,区别在于,这里多添加了一个参数,用来标示 是从前向后遍历,还是从后往前遍历。
    - (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block
    调用例子如下:
    NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil];
    
    
        [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
            NSLog(@"%@,%d",str,index);
        }];
    30、    同上面的方法一项,不过NSIndexSet 参数标示,根据下标取出的数组,这里真正在block 中遍历的数组,是根据NSindexSet 取到的子数组
    - (void)enumerateObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOL *stop))block 
    调用如下:
    [array enumerateObjectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(1, 3)] options:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){
            NSLog(@"%@,%d",str,index);
        }];
    31、 根据条件用来获取一个NSUIndex 对象,主要是根据条件进行数据遍历使用
    - (NSUInteger)indexOfObjectPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
    
    调用如下:
    NSInteger index = [array indexOfObjectPassingTest:^ BOOL (id tr,NSUInteger index, BOOL *te){
            NSString *s = (NSString *)tr;
            if([@"wendy" isEqualToString:s])
            {
                return YES;
            }
            return NO;
        }];
        
        NSLog(@"index==%d=.",index);
    32、同上面的方法相同,却别在于,这里添加了一个参数,用来表示遍历是从前向后遍历还是从后遍历。
    - (NSUInteger)indexOfObjectWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
    
    
    33、这个添加了参数NSIntexSet 参数,用来获取子数组,然后使用这个子数组进行遍历,处理数据
    - (NSUInteger)indexOfObjectAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
    
    
    31、 根据block 的处理获取一个NSIndexSet 对象。
    - (NSIndexSet *)indexesOfObjectsPassingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
    调用如下:
        NSIndexSet *index = [array indexesOfObjectsPassingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){
            
            NSString *s = (NSString *)tr;
            if([s isEqualToString:@"andy"]){
                return YES;
            }
            return NO;
        }];
    
    
        NSLog(@"%@",index);
    33 、 这个方法添加了参数,用来表示,是从前向后,遍历还是从后向前遍历
    - (NSIndexSet *)indexesOfObjectsWithOptions:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate NS_AVAILABLE(10_6,4_0);
    
    
    调用示例如下:
        NSIndexSet *index = [array indexesOfObjectsWithOptions:NSEnumerationReverse passingTest: ^ BOOL (id tr, NSUInteger index,BOOL *te){
            
            NSString *s = (NSString *)tr;
            if([s isEqualToString:@"andy"]){
                return YES;
            }
            return NO;
        }];
    
    
        NSLog(@"%@",index);
    
    
    34、 添加参数NSIndexSet 用来获取子数组,使用子数组进行遍历
    - (NSIndexSet *)indexesOfObjectsAtIndexes:(NSIndexSet *)s options:(NSEnumerationOptions)opts passingTest:(BOOL (^)(id obj, NSUInteger idx,BOOL *stop))predicate
    
    
    35、对数组进行排序操作  参数cmptr 是一个block 函数块,返回的数据类型是一个NSComparisonResult 对象
    - (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr 
    
    
    调用例子如下:
    NSArray *te = [array sortedArrayUsingComparator:^ NSComparisonResult (NSString *s,NSString *s2){
            if(s.length < s2.length){
                return NSOrderedAscending;
            }
            if(s.length > s2.length){
                return NSOrderedDescending;
            }
                
           return NSOrderedSame;
        }];
        
        NSLog(@"te=%@.",te);
    36、进行排序操作,NSSortOptions 排序的参数 用来表示是同时排序,还是稳定执行。
    - (NSArray *)sortedArrayWithOptions:(NSSortOptions)opts usingComparator:(NSComparator)cmptr NS_AVAILABLE(10_6,4_0);
        
        NSArray *test = [array sortedArrayWithOptions:NSSortStable usingComparator:^ NSComparisonResult (NSString *s,NSString *s2){
        
            if(s.length < s2.length){
                return NSOrderedAscending;
            }
            if(s.length > s2.length){
                return NSOrderedDescending;
            }
            
            return NSOrderedSame;
        }];
        
        NSLog(@"%@",test);
    NSArray二
  • 相关阅读:
    Spring 框架的设计理念与设计模式分析
    stratos paas平台
    云计算国际标准
    如何在KVM中管理存储池
    深度学习(四) softmax函数
    深度学习(二)BP求解过程和梯度下降
    深度学习(一) BP神经网络
    提交代码到git
    Mac 安装tensorflow
    Mac 安装Git
  • 原文地址:https://www.cnblogs.com/xujiahui/p/7048590.html
Copyright © 2011-2022 走看看