- (NSString *)fileLocation{ //獲取文件路徑(返回值是一個數組),其實就只有一個值 NSArray *folders = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES); if ([folders count] == 0) { return nil; } NSString *documentsFolder = folders[0]; return [documentsFolder stringByAppendingString:@"list2.txt"]; } - (BOOL)hasFileAlreadyBeenCreated{ //判斷文件是否存在 BOOL result = NO; NSFileManager *fileManger = [[NSFileManager alloc] init]; if ([fileManger fileExistsAtPath:[self fileLocation]]) { return YES; } return result; } - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(concurrentQueue, ^{ //開啓一個異步操做,gcd隊列是concurrentQueue NSInteger numberOfValueRequired = 10; if ([self hasFileAlreadyBeenCreated] == NO) { //是否文件已存在, dispatch_sync(concurrentQueue, ^{ //不存在 NSMutableArray *arrayOfRandomNumbers = [[NSMutableArray alloc] initWithCapacity:numberOfValueRequired]; NSInteger counter = 0; for (counter = 0; counter < numberOfValueRequired; counter++) { unsigned int randomNumber = arc4random()%((unsigned int)RAND_MAX + 1); [arrayOfRandomNumbers addObject:[NSNumber numberWithUnsignedInt:randomNumber]]; } [arrayOfRandomNumbers writeToFile:[self fileLocation] atomically:YES]; }); } __block NSMutableArray *randomNumbers = nil; dispatch_sync(concurrentQueue, ^{ if ([self hasFileAlreadyBeenCreated]) { //文件存在 randomNumbers = [[NSMutableArray alloc] initWithContentsOfFile:[self fileLocation]]; NSLog(@"Self Location is %@",[self fileLocation]); NSArray * sortArray = [randomNumbers sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSNumber *number1 = (NSNumber *)obj1; NSNumber *number2 = (NSNumber *)obj2; return [number1 compare:number2]; }]; NSLog(@"kkkk %@",sortArray); [sortArray writeToFile:[self fileLocation] atomically:YES]; } }); } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@4,@7,@2,@8,@1,@7,@6,@9, nil ]; // NSMutableArray *mutaleArray = [[NSMutableArray alloc] initWithArray:array]; NSArray *sortArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { NSNumber *N1 = (NSNumber *)obj1; NSNumber *N2 = (NSNumber *)obj2; return [N1 compare:N2]; /*if(obj1 > obj2){ //第二種方法 return NSOrderedAscending; }else{ return NSOrderedDecending } */ }]; for (int i = 0; i < sortArray.count; i++) { NSLog(@"Number is %@",sortArray[i]); } }NSSortDescriptor 指定用於對象數組排序的對象的屬性。 數組
若是是Employee對象須要按照name來排序,就生成下面的descriptor dom
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:name ascending:YES]; 異步
若是須要多個排序,好比先按name排序,再按入職日期排序。那就建立兩個descriptor async
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:hireDate ascending:YES]; ui
兩個descriptor放到數組裏一塊兒傳給須要排序的數組。 atom
若是對象就是NSString,就是字符串數組排序,那更簡單了,sortdescriptor的key直接指定爲nil,就直接排序對象,而不是對象的某一個屬性了。 spa
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES]; code
NSArray *descriptors = [NSArray arrayWithObject:descriptor]; 對象
NSArray *myDataArray = [NSArray arrayWithObjects:@"what", @"xero", @"highligth", @"mountain", @"Victory", @"Balance", nil]; 排序
NSArray *resultArray = [myDataArray sortedArrayUsingDescriptors:descriptors];
NSLog(@"%@", resultArray);
NSArray 使用sortedArrayUsingDescriptors,返回排序好的數組。
NSMutableArray能夠直接使用sortUsingDescriptors,對數組自己排序。