//
// main.m
// NSarray_new
//
// Created by qianfeng on 14-11-9.
// Copyright (c) 2014年 qianfeng. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
// insert code here...
NSLog(@"Hello, World!");
//NSArray不可变数组
//NSMutableArray可变数组
//数组的元素可以使任意类型的对象
//数组中装有元素的地址
Dog *dog1 = [[Dog alloc] init];
NSArray *array = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",dog1,nil];
NSLog(@"%@",array);
//每个类都有一个description方法,这个方法的返回值是一个描述类信息的字符串。
//打印类对象就是打印类的description方法的返回值。
NSLog(@"%@",dog1);
//枚举器遍历数组:
NSLog(@"枚举遍历:");
//使用数组创建枚举对象,通过枚举对象遍历数组对象。
NSEnumerator *enumerator = [array objectEnumerator];
id obj;
//通过obj遍历字符串对象并打印出来
while (obj = [enumerator nextObject]){
NSLog(@"%@",obj);
}
//倒序枚举器:
NSEnumerator *reserenumer = [array reverseObjectEnumerator];
id reverobj;
while (reverobj = [enumerator nextObject]) {
NSLog(@"reverobj: %@",reverobj);
}
//快速枚举
NSLog(@"快速枚举法:");
for(id obj in array){
NSLog(@"%@",obj);
}
//计算数组元素个数:
NSUInteger len = [array count];
NSLog(@"len = %lu",len);
NSArray *arrat_5 = [NSArray arrayWithArray:array];
NSLog(@"array = %@",arrat_5);
NSUInteger index = [arrat_5 indexOfObject:@"ss"];
NSLog(@"index = %lu",index);
//- (NSArray *)objectsAtIndexes:(NSIndexSet *)indexes;
NSIndexSet *indexset = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 5)];
NSArray *naarray = [[NSArray alloc] init];
// naarray = [arrat_5 objectsAtIndexes:indexset];
//使用i值遍历: 数组中的方法:
//返回单个元素的地址:2表示第3个元素,元素下标为2的元素。
obj = [array objectAtIndex:2];
//结合上面所讲,可以通过for循环,手动遍历:
//对于可变数组的操作,只有通过以下这种方式才能够对“可变”数组进行各种操作,上面两种枚举是不可行的。
for (int i = 0; i<len; i++) {
NSLog(@"手动遍历:\n");
NSLog(@"%@",[array objectAtIndex:i]);
}
*/
//在数组的结尾追加一个对象
// [array arrayByAddingObject:<#(id)#>]
// [array arrayByAddingObjectsFromArray:<#(NSArray *)#>]
NSArray *array_01 = @[@"qianfeng",@"chengge"];
NSArray *array_02 = @[@"dfji",@"sdfdsf"];
//把两个数组何在一起,array_02在后,array_01在前,
array_01 = [array_02 arrayByAddingObjectsFromArray:array_01];
NSLog(@"aara_01 = %@",array_01);
//以传入字符串作为连接符拼接数组。组成一整个字符串。
array_01 = [array_01 componentsJoinedByString:@"SB"];
//返回两个数组中第一个相同的对象
array_01 = [array_01 firstObjectCommonWithArray:@"qianfeng"];
/*********可变数组****/
NSMutableArray * muarray = [[NSMutableArray alloc] init];
//为数组添加三个元素:
//创建一个不可变数组之后,那么数组中的元素不可被修改,元素指向的兑现高取决于定义的对象
//
[muarray addObject:@"one"];//0
[muarray addObject:@"tow"];//1
[muarray addObject:@"three"];//2
[muarray addObject:@"four"];//3
[muarray addObject:@"five"];//4
[muarray addObject:@"three"];//2
NSLog(@"%@",muarray);
/*
//删除指定的字符串对象:
[muarray removeObject:@"one"];
NSLog(@"remove:%@",muarray);
//从第x个开始找“three”字符串,遍历数组到第x+location个元素,如果遇见就删除,没有就不删除。
[muarray removeObject:@"three" inRange:NSMakeRange(2, 1)];
NSLog(@"%@",muarray);
*/
//交换字符串位置:
[muarray exchangeObjectAtIndex:0 withObjectAtIndex:1];
NSLog(@"exchanged: %@",muarray);
//枚举器法的使用:逆序可操作性:
NSEnumerator *murat = [muarray reverseObjectEnumerator];
NSString * mustr;
int i = 0;
while (mustr = [murat nextObject]) {
i++;
//循环内可以进行增删改查的操作:
//测试:删除数组中的最后一个元素:
//如果没有if语句判断,为啥最后在循环之外输出muarray数组为空了呢?
//因为每次循环都执行一次[muarray removeLastObject];所以最后一个元素就是倒数第二个元素,直到元素被删除完为止
[muarray removeLastObject];
NSLog(@"%@",mustr);
if (i==1) {
break;
}
}
//打印muarray数组,其中的数据是空的?
NSLog(@"%@",muarray);
NSString *str_1 = @"I am a good man";
NSArray *array_1 = [str_1 componentsSeparatedByString:@" "];
NSMutableArray *muarray_1 = [[NSMutableArray alloc] init];
NSEnumerator *enurator_1 = [array_1 reverseObjectEnumerator];
NSString *str_2;
while (str_2 = [enurator_1 nextObject]) {
[muarray_1 addObject:str_2];
}
NSLog(@"%@",muarray_1);
//使用空格把muarray_2数组的元素连接起来
NSString *str_3 = [muarray_1 componentsJoinedByString:@" "];
NSLog(@"%@",str_3);
// 可变数组继承于不可变数组
NSMutableArray *mmuarray = [[NSMutableArray alloc] initWithObjects:@"one",@"tow",nil];
}
return 0;
}