NSArray:
indexOfObjectIdenticalTo:針對的對象地址,當對象是字符串或者數值時,不能根據地址找出兩個重復中的其中一個;當對象是OC對象時,可以。(估計是因為字符串和數值存放在棧:相同的兩個內存中的存儲地址一樣,所以不能利用地址區分。OC對象在堆)。字符串的mutableCopy也在堆區,所以mutable后是兩個儲存地址,也可區分;淺拷貝的copy就不行了。eg.
NSObject *str1 = @"3";
NSObject *str2 = [@"3" mutableCopy];
NSObject *str3 = @"5";
NSObject *sss = [[UIButton alloc] init];
NSInteger one = 1;
NSInteger two = 1;
NSInteger three = 3;
NSMutableArray *mA = [NSMutableArray arrayWithObjects:str1,str2,str3, nil];
NSInteger ii = [mA indexOfObjectIdenticalTo:str2];componentsJoinedByString: 數組變字符串,并在元素中插入string
NSArray *arr = @[@"12",@"34",@"5",@"6"];
NSString *str = [arr componentsJoinedByString:@"wgj"];
NSLog(@"%@",str);//結果:@"12wgj34wgj5wgj6"。descriptionWithLocale:等方法,打印,可以自定義,但不要打印self,會循環。后面的參數是用來優化打印的信息,可以在打印的時候,利用參數控制打印的一些自定義格式。
firstObjectCommonWithArray:
NSArray *arr2 = @[@"34",@"mi",@"12"];
NSArray *arr = @[@"12",@"34",@"5",@"6"];
//對比相同的元素,前后對比的對象順序寫法有關
NSString *str2 = [arr2 firstObjectCommonWithArray:arr];//結果@"34"
NSString *str = [arr firstObjectCommonWithArray:arr2];//結果@"12-
sortedArrayUsingFunction:把數組轉成data,利用函數的規則排序
NSArray *arr = @[@"322",@"1",@"22"];
NSData *data = [arr sortedArrayHint];
NSArray *reArr = [arr sortedArrayUsingFunction:sortType context:@"wg" hint:data];
NSLog(@"%@",reArr);
sortType: 自定義規則的函數
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;
} -
sortedArrayUsingSelector: 自定義一個類對象,類里面聲明和實現selector的方法,方法中自定義比較的規則;數組中盛放自定義的類對象,然后會生成比較后的數組結果。eg.
Man *man1 = [Man sortAllocWithN:@"a" num:19];
Man *man2 = [Man sortAllocWithN:@"c" num:14];
Man *man3 = [Man sortAllocWithN:@"b" num:13];NSArray *arr = @[man1,man2,man3]; NSArray *array2 = [arr sortedArrayUsingSelector:@selector(myCompare2:)]; for (Man *sort in array2) { NSLog(@"%@", sort.name); }
其中,Man:.h:
@interface Man : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, assign) NSInteger number;
- (NSComparisonResult)myCompare:(NSString *)name;
- (NSComparisonResult)myCompare2:(Man *)sort;
- (Man *)sortAllocWithN:(NSString *)name num:(NSInteger)num;
@end
.m:
- (Man *)sortAllocWithN:(NSString *)name num:(NSInteger)num {
Man * sort1 = [[Man alloc] init];
sort1.name = name;
sort1.number = num;
return sort1;
}
-
(NSComparisonResult)myCompare:(Man *)sort {
return [self.name compare:sort.name];
}
// 該方法用來排序數字
-
(NSComparisonResult)myCompare2:(Man *)sort {
if ( self.number > sort.number ) {
return NSOrderedDescending;
} else if (self.number < sort.number ) {
return NSOrderedAscending;
} else {
return NSOrderedSame;
}
}
subarrayWithRange: 根據range生成新的子數組。
- (BOOL)writeToFile: 和 - (BOOL)writeToURL: 寫入存儲,寫入文件
NSString *cachesDirectoryPath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"test.txt"];
NSURL *url2 = [NSURL fileURLWithPath:cachesDirectoryPath];
NSString *reStr = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:[reStr dataUsingEncoding:NSUTF8StringEncoding] options:0 error:nil];//data:也可以:NSData *data = [NSData dataWithContentsOfFile:path];
- (BOOL)writeToFile: 和 - (BOOL)writeToURL: 寫入存儲,寫入文件
makeObjectsPerformSelector和makeObjectsPerformSelector:(SEL)aSelector withObject:。這兩個方法讓數組的每個對象執行事件,不同在于對象中的方法實現:一個可以不帶參數,一個可以帶參數。e.g.
Man *man1 = [Man sortAllocWithN:@"wg01" num:1];
Man *man2 = [Man sortAllocWithN:@"wg02" num:2];
NSArray *arr = @[man1 ,man2];
[arr makeObjectsPerformSelector:@selector(test01)];objectsAtIndexes: 根據indexs的集合獲取新的數組。objectAtIndexedSubscript:根據下標獲取單個元素。
10.enumerateObjectsUsingBlock:等,是通過枚舉的方式,遍歷數組。
-
indexOfObjectPassingTest: 進行判斷,篩選操作,得出想要的元素;
indexesOfObjectsPassingTest:得出想要的元素數組e.g..
NSArray *array = @[@"12",@"mi",@"34",@"m",@"34"];
NSIndexSet *ld = [array indexesOfObjectsPassingTest:^BOOL(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if ([obj isEqualToString:@"34"]) {
NSLog(@"%@",obj);
return YES;
}else{
NSLog(@"NO:%@",obj);
return NO;
}}];
-
sortedArrayUsingComparator: block里面進行排序,得到新數組eg.
NSArray *array = @[@"12",@"66",@"34",@"1",@"34"];
NSArray *resA = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
if ([obj1 compare:obj2] == NSOrderedAscending) {
return NSOrderedAscending;
}else if ([obj1 compare:obj2] == NSOrderedDescending){
return NSOrderedDescending;
}else{
return NSOrderedSame;
}}]; NSLog(@"%@",resA);
- (NSUInteger)indexOfObject:(ObjectType)obj inSortedRange:(NSRange)r options:(NSBinarySearchingOptions)opts usingComparator:(NSComparator NS_NOESCAPE)cmp,是排序后的查找某元素,利用的折疊法查找,需要先排序
- (id)array;創建一個空數組
- (id)arrayWithObject:(id)anObject;指定一個元素創建數組對象
- (id)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt;指定個數從一個數組對象創建新的數組對象(類消息)
- (id)arrayWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION;指定多個元素創建數組對象
- (id)arrayWithArray:(NSArray *)array;生成新另外一個數組
- (id)initWithObjects:(const id [])objects count:(NSUInteger)cnt;指定個數從一個數組對象創建新的數組對象(實例消息)
- (id)initWithObjects:(id)firstObj, ... NS_REQUIRES_NIL_TERMINATION; 指定多個元素創建數組對象
- (id)initWithArray:(NSArray *)array;從已有數組初始化
- (id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;從已有數組初始化(標示作用,淺復制,還是深復制)
- (id)arrayWithContentsOfFile:(NSString *)path;從文件加載數據
- (id)arrayWithContentsOfURL:(NSURL *)url;從網絡地址加載數據
- (id)initWithContentsOfFile:(NSString *)path;從文件加載數據
- (id)initWithContentsOfURL:(NSURL *)url;從網絡地址加載數據
其他:利用kvc對數組進行一些操作:
獲取數組里的,最大、最小、平均、求和
NSArray *array = @[@"1",@"3",@2,@9.5,@"1.2"];
NSNumber *sum = [array valueForKeyPath:@"@sum.floatValue"];
NSNumber *avg = [array valueForKeyPath:@"@avg.floatValue"];
NSNumber *max = [array valueForKeyPath:@"@max.floatValue"];
NSNumber *min = [array valueForKeyPath:@"@min.floatValue"];
NSLog(@"sum:%@",sum);
NSLog(@"avg:%@",avg);
NSLog(@"max:%@",max);
NSLog(@"min:%@",min);
刪除重復數據
NSArray *array = @[@"name", @"w", @"aa", @"zxp", @"aa"]; //返回的是一個新的數組
NSArray *newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];
NSLog(@"%@", newArray);
同樣可以嵌套使用,先剔除name對應值的重復數據再取值
NSArray array = @[ @{@"title":@"zxp",@"name":@"zhangxiaoping"}, @{@"title":@"zxp2",@"name":@"zhangxiaoping2"}, @{@"title":@"zxp",@"name":@"zhangxiaoping3"}, @{@"title":@"zxp",@"name":@"zhangxiaoping"}];
//根據name字段,來進行重復刪除。
NSArray newArray = [array valueForKeyPath:@"@distinctUnionOfObjects.name"];
//如果要根據title字段來刪除重名的寫法為@distinctUnionOfObjects.title
NSLog(@"%@", newArray);
//可以從對象組成的數組中,獲取數組中每個對象中字段price的和:用
@UnionOfObjects.price
//相同的價格也相加
/
print:( zhangxiaoping3, zhangxiaoping2, zhangxiaoping)是一個字符串數組/
@distinctUnionOfObjects //清除重復值
@unionOfObjects //保留重復值
進行實例方法的調用
NSArray *array = @[@"name", @"w", @"aa", @"ZXPing"];
NSLog(@"%@", [array valueForKeyPath:@"uppercaseString"]);
相當于數組中的每個成員執行了uppercaseString方法,然后把返回的對象組成一個新數組返回。既然可以用uppercaseString方法,那么NSString的其他方法也可以,比如[array valueForKeyPath:@"length"]。當然,其他對象的實例方法也可以以此類推來進行調用~!