日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言OBJECT数组,Objective-C中NSArray的基本用法示例

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言OBJECT数组,Objective-C中NSArray的基本用法示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NSArray的排序

+ (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName{

Student *stu = [[Student alloc] init];

stu.firstName = firstName;

stu.lastName = lastName;

return stu;

}

+ (id)studentWithFirstName:(NSString *)firstName lastName:(NSString *)lastName bookName:(NSString *)bookName{

Student *stu = [Student studentWithFirstName:firstName lastName:lastName];

stu.book = [Book bookWithName:bookName];

return stu;

}

- (NSComparisonResult)compareStudent:(Student *)stu{

NSComparisonResult result = [self.firstName compare:stu.firstName];

if (result == NSOrderedSame) {

result = [self.lastName compare:stu.lastName];

}

return result;

}

- (NSString *)description{

//return [NSString stringWithFormat:@" %@ %@ %@",self.firstName,self.lastName,self.book.name];

return [NSString stringWithFormat:@" %@ %@ %@",self.firstName,self.lastName,_book.name];

}

#pragma mark 3.NSArray排序1

void arraySort1(){

NSArray *array = [NSArray arrayWithObjects:@"2",@"3",@"1",@"4", nil nil];

// 指定系統自帶規定的比較方法compare:

NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];

NSLog(@"%@",array2);

}

#pragma mark 3.NSArray排序2

void arraySort2(){

Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao"];

Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng"];

Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong"];

Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng"];

NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil];

// 類似JAVA中得compareTo,自己定義比較方式,但是一定要實現compare方法

NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];

NSLog(@"%@",array2);

}

#pragma mark 3.NSArray排序3-Block排序

void arraySort3(){

Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao"];

Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng"];

Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong"];

Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng"];

NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil];

NSArray *array2 = [array sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2) {

NSComparisonResult result = [obj1.firstName compare:obj2.firstName];

if (result == NSOrderedSame) {

result = [obj1.lastName compare:obj2.lastName];

}

return result;

}];

NSLog(@"%@",array2);

}

#pragma mark 4.NSArray排序4-高級排序

void arraySort4(){

Student *stu1 = [Student studentWithFirstName:@"hu" lastName:@"mingtao" bookName:@"lianai"];

Student *stu2 = [Student studentWithFirstName:@"zhu" lastName:@"wenpeng" bookName:@"tianshi"];

Student *stu3 = [Student studentWithFirstName:@"zhao" lastName:@"weisong" bookName:@"love"];

Student *stu4 = [Student studentWithFirstName:@"hu" lastName:@"junpeng" bookName:@"qingren"];

NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3,stu4, nil nil];

// 1.先按照書名進行排序

NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];

// 2.先按照姓進行排序

NSSortDescriptor *firstNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];

// 3.先按照名進行排序

NSSortDescriptor *lastNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES];

NSArray *array2 = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:bookNameDesc,firstNameDesc,lastNameDesc, nil nil]];

NSLog(@"%@",array2);

}

NSArray的一些用法

NSArray? 只允許裝OC對象,并且不能裝空值,空代表數組元素的結束

#pragma mark - NSArray的基本用法

// 創建一個空數組

NSArray *array = [NSArray array];

// 創建有一個元素的數組

array = [NSArray arrayWithObject:@"123"];

// 創建有多個元素的數組

array = [NSArray arrayWIthObjects:@"a",@"b",nil ];//不能裝nil空指針,空值代表數組元素結束

// 將一個數組賦值給一個數組

+ (instancetype)arrayWithArray:(NSArray *)array;

// 獲取元素的個數

int count = [array count]; //和 count = array.count; 相同,都是調用get方法

// 是否包含一個元素

- (bool)containsObject:(id)anObject;

// 返回最后一個元素

- (id) lastObject;

// 獲取index位置的元素

- (id)objectAtIndex:(NSUInteger) index;

// 獲取元素的位置

- (NSUInteger) indexOfObject:(id)anObject;

// 在range范圍內查找元素的位置

- (NSUInteger) indexofObject:(id)anObject inRange:(NSRange)range;

// 比較兩個集合內容是否相同

- (Bool) isEqualToArray:(NSArray *)otherArray;

// 返回兩個集合中第一個相同的對象元素

- (id) firstObjectCommonWithArray:(NSArray *)otherArray;

#pragma mark - NSArray的高級用法

//讓集合里面的所有元素都執行aSelector這個方法

- (void)makeObjectsPerformSelector:(SEL)aSelector;

//讓集合里面的所有元素都執行aSelector這個方法,給這個方法添加參數,但是只支持一個參數

- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument

//添加一個元素,返回一個新的NSArray(方法調用者本身沒有發生變化)

- (NSArray *)arrayByAddingObject:(id)anObject

//添加otherArray的所有元素,返回一個新的NSArray(方法著本身沒有改變)

- (NSArray *) arrayByAddingObjectsFromArray:(NSArray *) otherArray;

//截取range范圍的數組

- (NSArray *) subarrayWithRange:(NSRenge)range;

//用separator做拼接符,拼接成一個字符串

- (NSString *) componentsJoinedByString:(NSString *)separator

//將NSArray持久化到文件中去

- (Bool) writeToFile:(NSString *)path atomically:(Bool)useAuxiliaryFile

#pragma mark - NSArray的遍歷

// 方法一:普通遍歷(利用for循環)

void arrayFor1(){

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];

int count = array.count;

for(int i=0; i

id obj = [array objectAtIndex:i];

NSLog(@"%i-%@",i, obj);

}

}

// 方法二:快速遍歷

void arrayFor2(){

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];

int count = array.count;

int i=0;

for(id obj in array){

NSLog(@"%i-%@",i, obj);

i++;

}

}

// 方法三:利用block遍歷

void arrayFor3(){

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

NSLog(@"%zi->%@",idx, obj);

//? *stop = YES; //改變外邊的Bool,終止遍歷

}];

}

// 方法四:利用迭代器

先介紹一下-->NSEnumerator迭代器:集合的迭代器,可以用于遍歷集合元素,NSArray 有相應的方法來獲取迭代器

//獲取一個正序遍歷的迭代器

- (NSEnumerator *) objectEnumerator;

//獲取一個反序遍歷的迭代器

- (NSEnumerator *) reverseObjectEnumerator;

@常用方法:

//獲取下一個元素

- (id) nextObject;

//獲取所有的元素

- (NSArray *) allObjects

void arrayFor4(){

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];

NSEnumerator *enumerator = [array objectEnumerator];// 返回數組的迭代器

//如果放到遍歷之后,則取到空,原因是,遍歷完了,就沒值了

NSArray *array2 = [enumerator allObjects];

NSLog(@"array2=%@", array2);

//獲取下一個需要遍歷的元素

id obj = nil;

while (obj = [enumerator nextObject]) {

NSLog(@"obj=%@", obj);

}

}

使用block 塊遍歷整個數組。這個block 需要三個參數,id obj 表示數組中的元素。

NSUInteger idx 標示元素的下標,

boolbool *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,BOOLBOOL *stop))block

調用例子如:

NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil nil];

[array enumerateObjectsUsingBlock:^(id str,NSUInteger index, BOOL* te){

NSLog(@"%@,%d",str,index);

}];

同上面的方法一項,區別在于,這里多添加了一個參數,用來標示 是從前向后遍歷,還是從后往前遍歷。

- (void)enumerateObjectsWithOptions:(NSEnumerationOptions)opts usingBlock:(void (^)(id obj, NSUInteger idx,BOOLBOOL *stop))block

調用例子如下:

NSArray *array = [NSArray arrayWithObjects:@"wendy",@"andy",@"tom",@"test", nil nil];

[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id str,NSUInteger index, BOOL* te){

NSLog(@"%@,%d",str,index);

}];

總結

以上是生活随笔為你收集整理的c语言OBJECT数组,Objective-C中NSArray的基本用法示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。