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二
  • 相关阅读:
    48. Rotate Image
    83. Remove Duplicates from Sorted List
    46. Permutations
    HTML5笔记
    18. 4Sum
    24. Swap Nodes in Pairs
    42. Trapping Rain Water
    Python modf() 函数
    Python min() 函数
    Python max() 函数
  • 原文地址:https://www.cnblogs.com/xujiahui/p/7048590.html
Copyright © 2011-2022 走看看