zoukankan      html  css  js  c++  java
  • 字符串数组和字典

    【字段的权限】

    【注】在类中声明字段,可以为字段添加权限

    @private 私有权限

    @protected 保护权限

    @public 公有权限

    @interface Father : NSObject

    {

    @private    //私有权限修饰的变量,不能被子类继承,不能被外部函数访问。

        int a;

    @protected  //缺省权限 保护权限修饰的变量,可以被子类继承,不能被外部函数访问。

        int b;

        int c;

    @public     //公有权限修饰的变量,可以被子类继承,可以被外部函数访问。

        int d;

    }

    @end

    father->d = 9;

    //保护成员,被继承了,仍然是保护成员

    //公有成员,被继承了,仍然是公有成员

    【注】

    //实际工作中,根本不需要使用权限,都使用缺省的保护权限就可以了。

    //如果你想要成员变量被外部函数访问,声明成属性。

    //如果你想变量不被子类继承,不对外公开。声明在实现里。

    @implementation Father

    {

    int x;

    }

    【方法的权限】

    【注】

    //OC中成员方法都是公有的,可以被继承,可以被外部方法访问。

    //没有在接口中做声明的方法,这个方法不能被外部函数直接访问。

    //通过不声明(或者仅在匿名类别中声明),我们模拟了私有方法,这个过程,有时被称为方法的私有化。

    【注】下面情况,方法私有化不成功

    1.父类公有的方法,子类重写,即使子类不声明,方法也是公有的。

    2.在协议中声明的方法,遵从协议的对象,即使不声明,只实现,方法也是公有的

    【另】方法的私有化,声明即外露,不声明即不外露,本没什么可记的。但是面试经常会被问到:OC能实现私有方法吗?可照上述方式回答。

    【字符串】

    【注】OC的程序,依托于基础类库Foundation.Foundation框架提供了很多官方类,其中有三个基础的数据结构。

    【字符串】【数组】【字典】

    堆中字符串    链表       哈希表

    【注】OC兼容C的字符串,但是OC有自己的字符串,是一个类。声明的对象,既能存储一串字符,又能通过一些方法,管理存储的字符。

    【另】OC程序乃至iOS程序中,所有的字符串管理,都交给这个类完成。

    一.NSString(NextStep-> Cocoa)

    二.字符串的常用方法

    //字符串转其他类型数据

    int ret = [str1 intValue];

        long long ret2 = [str1 longLongValue];

        double ret3 = [str1 doubleValue];

        NSInteger ret4 = [str1 integerValue];

    1.返回字符串的长度

    NSUInteger len = [str length];

    2.返回单个字符

    unichar c = [str characterAtIndex:3];

    3.比较两个字符串的大小关系

    BOOL ret = [str1 isEqualToString:str2];

    NSComparisonResult ret2 = [str1 compare:str2];

    4.查找子串的位置和范围

    NSRange range = [str rangeOfString:@"粉刷"];

    5.子串的提取

    NSString * subStr1 = [str substringToIndex:5];

    //开区间

    NSString * subStr2 = [str substringFromIndex:5];

    //闭区间

    NSString * subStr3 = [str substringWithRange:range];

    //提取字符串

    //NSString不可修改,因此这里并不是截断字符串,只是取出原字符串的一部分,创建一个新的字符串,新字符串是原字符串的一部分,称为原字符串的字串

    四.可变字符串

    NSMutableString 继承自 NSString

    1.凡是NSString的方法,NSMutableString都能用

    2.凡是传参需要传入NSString * 传入NSMutableString *也行

    【专有方法】

    1.重置字符串内容

    [str setString:@"0123456789"];

    2.增 append  insert

    [str appendString:@"9876543210"];  追加

    [str appendFormat:@"%d %c %.2f", 34, 'T', 2.34];

    [str insertString:@"ABC" atIndex:3];

    [str insertString:[NSString stringWithFormat:@“%.2f”,3.14] atIndex:3];

    3.删 delete

    [str deleteCharactersInRange:range];

    4.改 replace

    [str replaceCharactersInRange:range withString:@"XXXXXXXXXXXXXXX"];

    //替换之前的字符串个数和替换之后的个数,长度可以不同。因为可变字符串是堆空间的对象,堆空间的大小可在运行时改变。

    5.查 rangeOfString:

    【数组】

    //OC的数组用于存储对象的地址,结构更接近于C中的链表。

    //OC使用C的数组存储大量的基础数据类型,OC的数组对象存储多个对象(地址)

    //OC的数组类有两个

    NSArray(数组) NSMutableArray(可变数组)

    //作用管理大量的对象数据。

    一.NSArray

    【创建数组对象】

    NSArray * array = [[NSArray alloc] initWithObjects:@"One", @"Two", @"Three", dog, nil];

    //构造方法的参数是任意对象的地址,不局限字符串。

    //每个对象可以是不同类的对象。

    //nil就是NULL NULL表示一般指针为空,nil表示对象指针为空。

    //数组中只存储每个对象的地址,并不真的存储对象。

    //所以,一个对象经常被添加到多个数组中,但还是一个对象。

    //类似 void * array[n];

    //用initWithObjects需要在末尾添加nil

    //%@是打印任何对象

    NSArray * array2 = @[@"One One", @"Two", @"Three", dog];

    //Xcode 4.6 以后才能用

    //打印数组,就是打印数组的每个元素

    NSLog(@"%@", array);

    【遍历数组】

    //找出数组中元素个数

    NSUInteger cnt = [array count];

    //找到某个元素,返回某个元素的地址。

    NSString * obj = [array objectAtIndex:1];

    obj = array[1];

    //xcode 4.6 以后

    //直接打印数组不支持中文,先取出后打印支持中文

    //id表示指向任何类型的指针,即泛型对象指针

    //快速枚举法

    for(id obj in array){

    //循环的第一次obj指向数组第0个元素,第二次指向数组第1个元素。遍历结束后,会自动退出

    NSLog(@“%@“,obj);}

    //如果使用快速枚举法,则遍历过程中,不得修改数组元素个数和元素的顺序

    【详见day3-数组-2】

    //判断一个对象是否属于某个类

    [obj isKindOfClass:[DeathKnight class]] == YES;

    【常用方法】

    //返回某个对象的位置(索引)

    NSUInteger index = [array indexOfObject:dk2];

    二.可变数组

    //NSMutableArray : NSArray

    //凡是NSArray的方法,NSMutableArray都能用。

    //凡是传参传NSArray*,也可以传NSMutableArray*

    //重置内容

    [array setArray:@[@"One", @"Two"]];

    //

    //追加

    [array addObject:@"Four"];

    //插入

    [array insertObject:@"Four" atIndex:1];

    //

    [array removeAllObjects];

    [array removeLastObject];

    //删除指定索引处元素

    [array removeObjectAtIndex:1];

    [array addObject:@"One"];

    //传入地址,删除指定元素,如果传入的是字符串,删除所有和字符串相等的元素。

    [array removeObject:@"One"];

    //删除指定的对象,如果对象是一般对象,则需传入你想删除的对象的地址。如果对象是字符串,则只需传入跟你想删除的字符串相等的字符串即可

    //

    //用某个对象,替换当前某索引处的元素

    [array replaceObjectAtIndex:0 withObject:@"Five"];

    //交换两个元素的位置

    [array exchangeObjectAtIndex:0 withObjectAtIndex:2];

    三.字符串分割

    【字典】

    //NSDictionary 和 NSMutableDictionary

    //NSMutableDictionary : NSDictionary

    //两个凡是

    一.NSDictionary

    //创建字典对象

    //字典中的数据以键值对的形式存储

    //@"One”是键值对的值(value), @“1”是键值对的键(key)

    //字典的值是任意对象,键一般使用字符串

    //字典的目的是通过键找到值。键是手段,值是目的。值是需要存储的数据,键仅仅是查找数据的索引

    //字典采用哈希表存储数据,因此查找速度快,没有顺序,不存在第一键值对,第二键值对

    //通过键计算一个哈希值,比如5,则将对应的值的地址存在哈希表的第5个格子里

    //OC的字典不允许两个键值对拥有相同的键

    //字典和数组一样,只储存对象的地址,不储存对象本身

    NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"One", @"1", @"Two", @"2", @"Three", @"3", @"One"@"4", nil];

    NSDictionary * dict2 = @{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"};

    //通过传入键,返回值的地址

    NSString * value = [dict objectForKey:@"3"];

    value = dict[@"3"];

    //Xcode 4.6 以后

    //如果没有对应的键,返回nil

    //返回键值对总数

    NSUInteger count = [dict count];

    //返回所有的键

    NSArray * keys = [dict allKeys];

    //返回所有的值

    NSArray * values = [dict allValues];

    二.可变字典

    //重置字典

    [mutableDict setDictionary:@{@"1" : @"One", @"2" : @"Two", @"3" : @"Three"}];

           

    //

    [mutableDict setObject:@"Four" forKey:@"4"];

           

    //

    //通过键删除值

    [mutableDict removeObjectForKey:@"3"];

    //通过多个键,删除多个值

    [mutableDict removeObjectsForKeys:@[@"1", @"2", @"3"]];

    //删除所有键值对

    [mutableDict removeAllObjects];

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/liudongyan/p/4395197.html
Copyright © 2011-2022 走看看