首页 > 代码库 > 对象集合 一

对象集合 一

1,创建数组。

NSArray是固定数组,NSMutableArray是可变数组。

创建固定数组

NSArray *listOfLetters = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];

也可用类似的方法创建可变数组,NSMutableArray是NSArray的子类。下面是一些最常用的方法以及解释。

- (id)initWithObjects:(const id [])objects count:(NSUInteger)cnt; Initializes an array with the specified objects and count

 

- (id)initWithObjects:(id)firstObj, ...

 NS_REQUIRES_NIL_TERMINATION;

Initializes an array with the specified nil- terminated list of objects

 

- (id)initWithArray:(NSArray *)array;

Initializes an array using another array

 

- (id)initWithArray:(NSArray *)array copyItems:(BOOL)flag;

Initializes an array using another array and creates new copies of each object

 

- (id)initWithContentsOfFile:(NSString *)path;

Initializes an array with the contents of a local file

 

- (id)initWithContentsOfURL:(NSURL *)url;

Initializes an array with the contents at a URL

代码例子。

 

//创建打印固定数组。

        NSArray *listOfLetters1 = [NSArray arrayWithObjects:@"A", @"B", @"C", nil];

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

//这里注意NSNumber是对象

        NSNumber *number1 = [NSNumber numberWithInt:1];

        NSNumber *number2 = [NSNumber numberWithInt:2];

        NSNumber *number3 = [NSNumber numberWithInt:3];

        NSMutableArray *listOfNumbers1 = [[NSMutableArray alloc] initWithObjects:number1, number2, number3, nil];

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

//极少用的方法

        id list[3];

        list[0] = @"D";

        list[1] = @"E";

        list[2] = @"F”;

//这里给分配了数组的长度。

        NSMutableArray *listOfLetters2 = [[NSMutableArray alloc] initWithObjects:list count:3];

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

 

2,数组引用对象。

得到数组内的第一个对象

NSString *stringObject1 = [listOfLetters objectAtIndex:0];

得到数组内最后一个对象

NSString *stringObject2 = [listOfLetters lastObject];

你也可以通过内容找到数组的下标

NSUInteger position = [listOfLetters indexOfObject:@"B”];

具体代码

        NSMutableArray *listOfLetters = [NSMutableArray arrayWithObjects:@"A", @"B", @"C", nil];

        NSString *stringObject1 = [listOfLetters objectAtIndex:0];

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

        

        NSString *stringObject2 = [listOfLetters lastObject];

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

        NSUInteger position = [listOfLetters indexOfObject:@"B"];

        NSLog(@"position = %lu", position);

3,获取数组个数。

用数组.count就可以,

具体代码例子。

 

NSMutableArray *listOfLetters = [NSMutableArray arrayWithObjects:@"A", @"B", @"C", nil];

        NSLog(@"listOfLetters has %lu elements", listOfLetters.count);

4,遍历数组

我们就不用书上的方法了,这里直接创建数组。

NSArray *listOfObjects = @[@"A",@"B",@"C",@"D”];

然后遍历它。

for(NSMutableString *s in listOfObjects){

            NSLog(@"This string in lowercase is %@", [s lowercaseString]);

        }

这里 用lowercaseString把字符串变小写了。

 

也可以用@selector向数组发送方法,用withObject来传递参数

[listOfObjects makeObjectsPerformSelector:@selector(appendString:)

                               withObject:@"-MORE”];

需要确认方法appendString可用。

利用blocks遍历数组。

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

{

    NSLog(@"object(%lu)‘s description is %@",idx, [obj description]);

}];

具体代码例子

        NSMutableString *string1 = [NSMutableString stringWithString:@"A"];

        NSMutableString *string2 = [NSMutableString stringWithString:@"B"];

        NSMutableString *string3 = [NSMutableString stringWithString:@"C"];

 

//        NSArray *listOfObjects = [NSArray arrayWithObjects:string1, string2, string3, nil];  

   

// 这里string1 等必须是可变字符串,写死是不行的 appendString方法会报错。

        NSArray *listOfObjects = @[string1, string2, string3];

        for(NSMutableString *s in listOfObjects){

            NSLog(@"This string in lowercase is %@", [s lowercaseString]);

        }

        [listOfObjects makeObjectsPerformSelector:@selector(appendString:)

                                       withObject:@"-MORE"];

 

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

            NSLog(@"object(%lu)‘s description is %@",idx, [obj description]);

        }];

5,数组排序。

创建Person类,然后创建数组。

person类大概是这个样子,.h文件

#import <Foundation/Foundation.h>

@interface Person : NSObject

@property(strong) NSString *firstName;

@property(strong) NSString *lastName;

@property(assign) int age;

-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lName andAge:(int)a;

-(void)reportState;

@end

Person.m

#import "Person.h"

@implementation Person

@synthesize firstName, lastName, age;

-(id)initWithFirstName:(NSString *)fName lastName:(NSString *)lName andAge:(int)a{

    self = [super init];

    if (self) {

        self.firstName = fName;

        self.lastName = lName;

        self.age = a;

    }

    return self;

}

-(void)reportState{

    NSLog(@"This person‘s name is %@ %@ who is %i years old", firstName, lastName, age);

}

@end

创建数组

        //Instantiate Person objects and add them all to an array:        

 

        Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"

 

                                              lastName:@"Smith"

 

                                                andAge:33];

 

        Person *p2 = [[Person alloc] initWithFirstName:@"Albert"

 

                                              lastName:@"Case"

 

                                                andAge:24];

 

        Person *p3 = [[Person alloc] initWithFirstName:@"Anton"

 

                                              lastName:@"Belfey"

 

                                                andAge:45];

 

        Person *p4 = [[Person alloc] initWithFirstName:@"Tom"

 

                                              lastName:@"Gun"

 

                                                andAge:17];

 

        Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"

 

                                              lastName:@"Lou"

 

                                                andAge:6];

 

        Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"

 

                                              lastName:@"Dirst"

 

                                                andAge:76];

 

        

 

        NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4, p5, p6,  nil];

可以使用NSSortDescriptor排序,例如

//Create three sort descriptors and add to an array:

NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"age"

                                                      ascending:YES];

NSSortDescriptor *sd2 = [NSSortDescriptor sortDescriptorWithKey:@"lastName"

                                                      ascending:YES];

NSSortDescriptor *sd3 = [NSSortDescriptor sortDescriptorWithKey:@"firstName"

                                                      ascending:YES];

NSArray *sdArray1 = [NSArray arrayWithObjects:sd1, sd2, sd3, nil];

传入你要排序的字段和是否正序排列。

通过描述符对数组进行排序。

NSArray *sortedArray1 = [listOfObjects sortedArrayUsingDescriptors:sdArray1];

注意,sdArray1。

具体代码示例。

@autoreleasepool {

        //Instantiate Person objects and add them all to an array:        

        Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"

                                              lastName:@"Smith"

                                                andAge:33];

        Person *p2 = [[Person alloc] initWithFirstName:@"Albert"

                                              lastName:@"Case"

                                                andAge:24];

 

        Person *p3 = [[Person alloc] initWithFirstName:@"Anton"

                                              lastName:@"Belfey"

                                                andAge:45];

 

        Person *p4 = [[Person alloc] initWithFirstName:@"Tom"

                                              lastName:@"Gun"

                                                andAge:17];

 

        Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"

                                              lastName:@"Lou"

                                                andAge:6];

 

        Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"

                                              lastName:@"Dirst"

                                                andAge:76];

        NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4, p5, p6,  nil];

        NSLog(@"PRINT OUT ARRAY UNSORTED");

        [listOfObjects makeObjectsPerformSelector:@selector(reportState)];

        //Create three sort descriptors and add to an array:

        NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"age"

 

                                                              ascending:YES];

        NSSortDescriptor *sd2 = [NSSortDescriptor sortDescriptorWithKey:@"lastName"

 

                                                              ascending:YES];

        NSSortDescriptor *sd3 = [NSSortDescriptor sortDescriptorWithKey:@"firstName"

 

                                                              ascending:YES];

        NSArray *sdArray1 = [NSArray arrayWithObjects:sd1, sd2, sd3, nil];

        NSLog(@"PRINT OUT SORTED ARRAY (AGE,LASTNAME,FIRSTNAME)");

        NSArray *sortedArray1 = [listOfObjects sortedArrayUsingDescriptors:sdArray1];

        [sortedArray1 makeObjectsPerformSelector:@selector(reportState)];

        NSArray *sdArray2 = [NSArray arrayWithObjects:sd2, sd1, sd3, nil];

        NSArray *sortedArray2 = [listOfObjects sortedArrayUsingDescriptors:sdArray2];

        NSLog(@"PRINT OUT SORTED ARRAY (LASTNAME,FIRSTNAME,AGE)");

[sortedArray2 makeObjectsPerformSelector:@selector(reportState)];

    }

6,数组查询。

一旦有你的谓词设置,可利用filteredArrayUsingPredicate获取查询值,并发送谓词作为参数。

例如

NSArray *arraySubset = [listOfObjects filteredArrayUsingPredicate:predicate];

 

Person类不变,看main里的代码。

    @autoreleasepool {

 

        //Instantiate Person objects and add them all to an array:        

 

        Person *p1 = [[Person alloc] initWithFirstName:@"Rebecca"

                                              lastName:@"Smith"

                                                andAge:33];

 

        Person *p2 = [[Person alloc] initWithFirstName:@"Albert"

                                              lastName:@"Case"

                                                andAge:24];

 

        Person *p3 = [[Person alloc] initWithFirstName:@"Anton"

                                              lastName:@"Belfey"

                                                andAge:45];

 

        Person *p4 = [[Person alloc] initWithFirstName:@"Tom"

                                              lastName:@"Gun"

                                                andAge:17];

 

        Person *p5 = [[Person alloc] initWithFirstName:@"Cindy"

                                              lastName:@"Lou"

                                                andAge:6];

        Person *p6 = [[Person alloc] initWithFirstName:@"Yanno"

                                              lastName:@"Dirst"

                                                andAge:76];

        NSArray *listOfObjects = [NSArray arrayWithObjects:p1, p2, p3, p4, p5, p6,  nil];

        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"age > 30"];

        NSArray *arraySubset = [listOfObjects filteredArrayUsingPredicate:predicate];

        NSLog(@"PRINT OUT ARRAY SUBSET");

[arraySubset makeObjectsPerformSelector:@selector(reportState)];

    }

7,操纵数组内容。就是一堆现成的方法,本别是给数组插入值,insertObject,前端插入,指定位置替换值replaceObjectAtIndex,更改位置,exchangeObjectAtIndex,根据下标和内容移除值,移除第一个值,移除最后一个值,移除所有值。

代码示例

        NSMutableArray *listOfLetters = [[NSMutableArray alloc] init];

 

        [listOfLetters addObject:@"A"];

 

        [listOfLetters addObject:@"B"];

 

        [listOfLetters addObject:@"C"];

 

        NSLog(@"OBJECTS ADDED TO ARRAY: %@", listOfLetters);

 

        [listOfLetters insertObject:@"a"

 

                            atIndex:0];

 

        NSLog(@"OBJECT ‘a‘ INSERTED INTO ARRAY: %@", listOfLetters);

 

        [listOfLetters replaceObjectAtIndex:2

 

                                 withObject:@"c"];

 

        NSLog(@"OBJECT ‘c‘ REPLACED ‘C‘ IN ARRAY: %@", listOfLetters);

 

        [listOfLetters exchangeObjectAtIndex:0

 

                           withObjectAtIndex:2];

 

        NSLog(@"OBJECT AT INDEX 1 EXCHANGED WITH OBJECT AT INDEX 2 IN ARRAY: %@", listOfLetters);

 

        [listOfLetters removeObject:@"A"];

 

        NSLog(@"OBJECT ‘A‘ REMOVED IN ARRAY: %@", listOfLetters);

 

        [listOfLetters removeObjectAtIndex:1];

 

        NSLog(@"OBJECT AT INDEX 1 REMOVED IN ARRAY: %@", listOfLetters);

 

        [listOfLetters removeLastObject];

 

        NSLog(@"LAST OBJECT REMOVED IN ARRAY: %@", listOfLetters);

 

        [listOfLetters removeAllObjects];

 

        NSLog(@"ALL OBJECTS REMOVED IN ARRAY: %@", listOfLetters);

8,将数组值写入文件。

        NSArray *listOfObjects = [NSArray arrayWithObjects:@"A", @"B", @"C", [NSNumber numberWithInt:1], [NSNumber numberWithInt:2], [NSNumber numberWithInt:3], nil];

        NSString *filePathName = @"/Users/Shared/array.txt";

        [listOfObjects writeToFile:filePathName

                        atomically:YES];

我们看到array.txt虽然是txt文件,但写入的数组是xml格式的。

9,从文件读取内容。紧接着上段代码,我们看到我们读取出来的是一个数组。

        NSString *filePathName = @"/Users/Shared/array.txt";

        NSArray *listOfObjects = [[NSArray alloc] initWithContentsOfFile:filePathName];

        NSLog(@"%@", listOfObjects);