数组:可变数组和不可变数组

1,不可变数组:类:NSArry
//对象初始化方法
1> NSArray *arr1 = [[NSArray alloc]initWithObjects:@”one”,@”two”,@”three”,@”four” ,nil];
NSLog(@”%@”,arr1);
/*结果:(
one,
two,
three,
four
)
*/
//类方法:( 即直接用类调用方法。)指定若干对象生成方法
2> NSArray *arr3 = [NSArray arrayWithObjects:@”one”,@”two”,@”three”,@”four” , nil];

    //类方法:使用已经存在的数组生成新数组,相当于复制

3> NSArray *arr2 = [[NSArray alloc]initWithArray:arr1];
   NSArray *arr2 = [NSArray arrayWithArray:arr1];         

//获取数组的元素的个数
//对象方法
4> NSUInteger count = [arr3 count];

//从数组中获取单个元素
//注意:在不知道什么类型的时候可以用id类型
5> id obj = [arr3 objectAtIndex:2];//id是通用指针类型

//数组元素拼接成字符串

 6>  NSString *str = [arr1 componentsJoinedByString:@"*"];//数组的元素用什么连接
    NSLog(@"%@",str);//结果:one*two*three*four

    //字符串元素根据什么分开存到数组中,用这个方法componentsSeparatedByString
 7>  NSString *arr4 = [str componentsSeparatedByString:@"*"];

//数组元素的遍历
1> for (int i = 0; i < [arr1 count]; i++) {
NSLog(@”%@”,[arr1 objectAtIndex:i]);
}

    //快速遍历
    //1,在for-in 中能使用 break和continue
    //2,在遍历过程中,不能修改数组元素
  2>  for (id obj  in arr1) {
        NSLog(@"%@",obj);//每次循环obj都会指向数组中的下一个元素,直到最后
    }

//获取指定对象的索引或者下标
NSInteger index = [arr1 indexOfObject:@”three”];
if (index == NSNotFound)//如果没有找到
NSLog(@”没有找到!”);
else
NSLog(@”%lu”,index);//结果是:2

    /*NSInteger index2 = [arr1 indexOfObject:@"three00"];

    NSLog(@"%lu",index2);//找不到的结果:9223372036854775807返回了整数的最大值

*/

//判断数组中是否包含某个对象,1表示包含,0表示不包含

    BOOL ret = [arr1 containsObject:@"one"];
    NSLog(@"%d",ret);//结果是1,表示包含,如果为0,表示不包含

2,可变数组:NSMutableArray

NSArray *arr0 = @[@”123”,@”456”];//初始化一个不可变的数组,不经常用这中方法初始化
NSMutableArray *marr1 = [[NSMutableArray alloc]initWithCapacity:10];//定义数组的容量
//初始化
1> //用一个存在的数组给新数组赋值
[marr1 setArray:arr0];

    //初始化
   2>  [marr1 setArray:@[@"abc"]];

//增加1
1> [marr1 addObject:@”xyz”];

    //增加2 把一个数组赋值给另一个数组
  2>  [marr1 addObjectsFromArray:arr0];

//删除
//删除最后一个
1> [marr1 removeLastObject];

    //删除指定下标
  2>  [marr1 removeObjectAtIndex:0];

    //删除指定内容
  3> [marr1 removeObject:@"xyz"];

  4>  //删除数组marr1中的和arr0数组中相同的元素

    [marr1 addObjectsFromArray:arr0];


  5> //删除指定范围内的指定对象
    [marr1 removeObject:@"123" inRange:NSMakeRange(0, 1)];

    //按指定数组中的元素进行删除
    //如果marr1的元素有arr0数组中的元素都删除

  6> [marr1 removeObjectsInArray:arr0];

    [marr1 addObjectsFromArray:arr0];

    //替换 replace
    [marr1 replaceObjectAtIndex:0 withObject:@"890"];


    //
    [marr1 replaceObjectsInRange:NSMakeRange(1, 1) withObjectsFromArray:arr0];


    //交换 exchange
    //根据给定得下标来交换
    [marr1 exchangeObjectAtIndex:0 withObjectAtIndex:2];

//数组排序

1,_allArr = [_allArr sortedArrayUsingSelector:@selector(nameAsceCompare:)];
这个排序方式是排序完成后还需要重新赋值到一个数组或者再重新放到自己中

2,[_allArr sortUsingSelector:@selector(nameAsceCompare:)];
这个排序方式是排序完成后不需要重新赋值到别的地方,在本书组中已经完成了排序。
3, ary=[ary sortedArrayUsingSelector:@selector(compare:)];
(compare:)的排序方式是升序排列

数组的最后一个元素
[arr lastObject] //

四,分类/类别/Category:

1,认识类别:给某个类打补丁的一个工具,也可分类管理成员方法
2,在类别中只能添加成员方法,不能添加成员变量,但是可以使用原类的成员变量
3,给某个类添加分类,相当于直接添加到原类中,但是并不会修改原类,其子类也可以使用类别中的方法。

五,类的类型-class
【说明】
1,class 是一种数据类型
2,class 类型的变量用于存放类的类型

六,description方法:(注意!)
在系统类中这个函数都已经实现了,所以可以NSLog(@”%@”,nam);这种形式直接打印系统类的对象的值,但是自己写得类不一定实现这个函数,要想打印出对象,必须在自己的类中实现这个函数
%@可以打印对象 ,其实打印的是description方法的返回值,若没有实现这个方法,则打印对象的类名加地址

七,数字类:NSNumber

NSNumber *nam = [[NSNumber alloc]initWithInt:100];
    NSLog(@"%@",nam);


    //数值转化为数字对象
    NSNumber *nam = [[NSNumber alloc]initWithInt:100];
    NSLog(@"%@",nam);

    NSNumber *nam1 = [[NSNumber alloc]initWithFloat:3.1415926];
     NSLog(@"%@",nam1);

    //数字对象转化为数值
    int newint = [nam integerValue];
    NSLog(@"%d",newint);

sortedArrayUsingSelector(重点)
//数组排序
//SEL是一个选择器,需要把比较函数转换成选择器
//sortedArrayUsingSelector是排序算法方法,官方已经实现,但是这个排序不知道谁在比较,也不知道是升序还是降序,所以我们需要给这个方法一个比较准则,就是需要另外一个比较方法,这个方法来决定是谁在比较,升序还是降序。
//提供的准则:左边>右边,进行交换——》得到升序结果
// 左边<右边,进行交换——》得到降序结果
NSArray *arr = [[NSArray alloc]init];
arr = @[@”abc”,@”abd”,@”123”,@”000”];
NSArray * arr1=[arr sortedArrayUsingSelector:@selector(compare:)];//这个类默认的是升序排序

sortedArrayUsingSelector是排序算法方法,官方已经实现,但是这个排序不知道谁在比较,也不知道是升序还是降序,所以我们需要给这个方法一个比较准则,就是需要另外一个比较方法,这个方法来决定是谁在比较,升序还是降序,所以需要我们定义一个方法,如下面的加黑加粗字体

NSArray *stuArr = @[stu1,stu2,stu3];
NSLog(@”%@”,stuArr);
SEL sel = @selector(mycompare:);//mycompare是提功的准则
NSArray *stuArrSorted = [stuArr sortedArrayUsingSelector:sel];
NSLog(@”%@”,stuArrSorted);

/-(BOOL)mycompare :(JWCStudent *) stu{//目的就是说明排序规则和说明和根据谁在排序
return _age > stu.age;
}
-(BOOL)mycompareAsceByName:(JWCStudent *)stud{
return [_name compare:stud.name]== NSOrderedDescending;

                ***重要!***
      **componentsSeparatedByCharactersInSet**

集合的运用
/*3. 传入一段字符串,字符串中可能有任何字符,要求找出字符串中最长的单词,即最长的连续英语字母,返回该单词的字母个数(20分)

比如:
输入 Yes, I hate the guy who make this fucking examination paper!
返回:11 即examination的长度。
*/
/*
本题的主要方法是在字符串划分成数组的时候的依据,是空格,逗号,和感叹号,分离之后就可以根据数组的每个元素的长来求出最长的长度。
其中,划分的时候原来都用componentsSeparatedByString,这只能根据一个元素划分,在此运用componentsSeparatedByCharactersInSet:它需要的参数是一个集合,这就可以把空格,逗号,和感叹号做成一个集合,一次性的就可以把字符串分成数组
*/
-(NSUInteger)numbersOfLongestWordInString:(NSString *)s{
int count = 0;

NSArray *arr = [s  componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@", !"]];
NSLog(@"arr=%@",arr);
for (NSString * obj in arr) {
    if (obj.length > count) {
        count = obj.length;
    }
}
return count;

}

你可能感兴趣的:(objective-c)