目前找到來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);
