黑马程序员————Foundation框架_知识总结(下)

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Foundation框架中常用的类
    /*
    NSString (NSMutableString)
    NSArray (NSMutableArray)
    NSSet (NSMutableSet)
    NSDictionary (NSMutableDictionary)
    */

一、NSArray与NSMutableArray

1.NSArray的创建

OC数组不能存放nil值
OC数组只能存放oc对象,不能存放非oc对象类型,如int、struct、enum等

    
    // NSArray是不可变数组,这个array永远是空数组
    NSArray *array = [NSArray array];
    
    // 创建单个对象
    NSArray*array2 = [NSArray arrayWithObject:@"jack"];
    
    // 创建多个对象,nil是数组元素结束的标记
    NSArray *array3 = [NSArray arrayWithObjects:@"jack",@"Rose" ,nil];
    
    // NSArray *array4 = [NSArray arrayWithObjects:@"jack",@"Rose",@"jim" ,nil];
    //快速创建一个NSArray对象
    NSArray *array4 = @[@"jack",@"Rose",@"jim"];
    
    // NSArray的元素个数
    NSLog(@"%ld",array3.count);
    
    // NSArray的元素访问
    NSLog(@"%@",[array3 objectAtIndex:1]);
    
    // 通过下标快速访问元素
    NSLog(@"%@",array3[0]);
    
2.NSArray的遍历

1)l用for循环遍历
    
    // for循环遍历
    Person *p = [[Person alloc] init];
    NSArray *array = @[p, @"jack"];
    for(int i = 0;i<array.count;i++)
    {
        NSLog(@"%@",array[i]);
    }

2)用for(id obj in 数组名)方式遍历
    // id obj代表数组的位置
    for(id obj in array)
    {
        // 找obj元素在数组中的位置
        NSUInteger i = [array indexOfObject:obj];
        NSLog(@"%@",obj);
    }

3)用enumerateObjectsUsingBlock遍历
<pre name="code" class="objc">    // 每遍历到一个元素,就会调用一次block,并且当前元素和索引位置当做参数传给block
    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)
     {
         NSLog(@"%ld-%@",idx,obj);
         
         // 可以控制停止遍历
         if(idx == 1);
         *stop = YES;
    }];

3.NSMutableArray的创建与删除元素
 
 
1)创建NSMutableArray数组
<pre name="code" class="objc">    // 创建NSMutableArray
    NSMutableArray *array = [NSMutableArray array];
    NSMutableArray *array2 = [NSMutableArray arrayWithObjects:@"jake",@"Rose",@"jim", nil];
    
    // 添加元素
    [array addObject:[[Person alloc] init]];
    [array addObject:@"jack"];
    
    // 错误写法
    //[array addObject:nil];
    
    NSLog(@"%ld",array.count);
</pre>
NSArray没有addobject:id这个方法,不可调用

2)删除元素

    // 删除所有元素
    [array removeAllObjects];
    
    // 删除指定对象
    [array removeObject:@"jack"];
    
    // 删除第二个元素
    [array removeObjectAtIndex:1];
    
    NSLog(@"%@",array);

3)经典错误

    // @[]只创建不可变数组NSArray
     NSArray *array4 = @[@"jack"];
    
    // 错误写法,返回的是NSArray不可变数组,NSMutableArray没有@[]的快速创建方法
    NSMutableArray *array3 = @[@"jack",@"rose"];
    
    // 发送错误
    [array addObject:@"jim"];

二、NSSet与NSMutableSet

1.NSSet的创建
    NSSet *s = [NSSet set];
    
    // 创建NSSet
    NSSet *s2 = [NSSet setWithObjects:@"jack",@"Rose",@"jim", nil];
    
    // 随机取出一个元素
    NSSet *str = [s2 anyObject];
    
    // 打印s2元素个数
    NSLog(@"@ld",s2.count);
    
    // 输出元素
    NSLog(@"%@",str);

2.NSMutableSet的创建
    NSMutableSet *s = [NSMutableSet set];
    
    // 增加元素
    [s addObject:@"jack"];
    
    // 删除元素
    [s removeObject:@"jack"];

3.总结比较NSArray和NSSet的区别

共同点

1)都是集合,都能存放多个oc对象
2)本身都不可变,都有一个可变的子类
3)只能存放oc对象,不能存放非oc对象类型(基本数据类型:int、double、char等)

不同点

NSArray有顺序,NSSet没有顺序

三、NSDictionary与NSMutableDictionary

1.NSDictionary的创建

    NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
    
    id obj = [dict objectForKey:@"name"];
    
    NSLog(@"%@",obj);

    // 通过键集合数组和值集合数组创建
    NSArray *keys = @[@"name",@"address"];
    
    NSArray *objects = @[@"jack",@"北京"];
    
    NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
    
    id obj = [dict objectForKey:@"address"];
    
    NSLog(@"%@",obj);

    // 较为麻烦的创建方式
    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                          @"jack",@"name",
                          @"北京",@"address", nil];
    
    id obj = [dict objectForKey:@"name"];
    
    // 返回的是键值对的个数
    NSLog(@"%ld",dict.count);

    // 简单快速创建
    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
    
    // 简单访问oc数组里面的内容
    id obj = dict[@"name"];
    
    NSLog(@"%@",obj);

2.NSMutableDictionary的基本使用

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    
    // 添加键值对
    [dict setObject:@"jack" forKey:@"name"];
    
    [dict setObject:@"北京" forKey:@"address"];
    
    // 为同一个key增加对象会覆盖之前的对象
    [dict setObject:@"Rose" forKey:@"name"];
    
    NSString *str = dict[@"name"];
    
    // 删除键值对
    [dict removeObjectForKey:@"name"];
    
    // 错误写法,@{}创建的是不可变字典,返回的是NSDctionary类型对象,是不可变的
    NSMutableDictionary *dict2 = @{@"name":@"jack"};

    [dict setObject:@"rose" forKey:@"name"];
    
     NSLog(@"%@",str);
    

3.NSDictionary 字典的遍历

1)第一种遍历方式

    NSDictionary *dict = @{
                           // 字典是无序的,不允许有相同的key,但循允许有相同的value
                           @"name" : @"jack",
                           @"name2" : @"jack",
                           @"name3" : @"jack",
                           @"address" : @"北京",
                           };
    // 取出所有key
    NSArray *keys = [dict allKeys];
    
    for(int i = 0;i<dict.count;i++)
    {
        NSString *key = keys[i];
        NSString *obj = dict[key];
        NSLog(@"%@-%@",key,obj);
    }
    

2)第二种遍历方式

    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@-%@",key,obj);
       // 只遍历一次就停止
       //*stop = YES;
    }];


四、NSNumber和NSValue

1.NSNumber

1)将基本数据类型转换成对象

<pre name="code" class="objc">    // 包装基本数据类型
    NSNumber *num = [NSNumber numberWithInt:10];
    
    // 放入集合对象
    NSDictionary *dict =@{
      
      @"name" : @"jack",
      
      @"age" : num
      
      };
    
    // 取出NSNumber对象
    NSNumber *num2 = dict[@"age"];
    
    // 转换成基本数据类型
    int a = [num2 intValue];
     NSLog(@"%d",a);


 
 
<pre name="code" class="objc">    // double类型转换
    NSNumber *n = [NSNumber numberWithDouble:10.3];
    int a1 = [n doubleValue];
    NSLog(@"%d",a1);


 2)将基本数据类型转成字符串 

    int a = 20;
    NSString *str = [NSString stringWithFormat:@"%d",a];
    
    // 把基本数据类型转成字符串
    [str intValue];
    
    // 把字符串转成基本数据类型
    //[@"20" intValue];
    
    NSLog(@"%d",[@"20" intValue]);

3)将基本数据类型转换成NSNumber对象(编译器特性)
    // @后面跟上一个数字自动转成number对象 @20
    [NSNumber numberWithInt:20];
   
    @10.5;  //double型
    @YES;   //BOOL型
    @'A';    //NSNumber对象
    @"A";   // NSString对象
    
    int age = 100;
    // 将age变量包装成NSNumber对象
    @(age);

2.NSValue

NSValue是NSNumber的父类

1)将结构体转为0c对象

<pre name="code" class="objc">    CGPoint p = CGPointMake(10, 10);
   
    // 结构体-->OC对象:将结构体包装成Value对象
    NSValue *value = [NSValue valueWithPoint:p];
    
    // 将Value转成对应的结构体
    [value pointerValue];

五、NSDate
 
 
1.NSDate的创建
<pre name="code" class="objc">    
    // 创建一个时间对象
    NSDate *date = [NSDate date];
    
    // 打印出的是0时区的时间
    NSLog(@"%@",date);

    // 使用时间间隔创建
    NSDate *date2 = [NSDate dateWithTimeInterval:5 sinceDate:date];
    
    // 从1970年开始走过的秒数
    NSTimeInterval seconds = [date2 timeIntervalSince1970];
                              
    // 从date2到现在经过的时间
    [date2 timeIntervalSinceNow];

2.日期格式化类
 
 
<pre name="code" class="objc"><pre name="code" class="objc">    // 日期格式化类
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    // y 年 M 月 d 日
    // m 分 s 秒 H(24)时 h(12)时
    formatter.dateFormat = @"yyyy-MM-dd  HH:mm:ss";
    
    // 格式化后的日期转为字符串
    NSString *str = [formatter stringFromDate:date];
    
    NSLog(@"%@",str);

    // 将字符串转换成date
    NSString *time = @"2011/09/10 18:56";
    
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    
    formatter.dateFormat = @"yyyy/mm/dd HH : mm";
    
    NSDate *date = [formatter dateFromString:time];
    
    NSLog(@"%@",date);

------ Java培训、Android培训、iOS培训、.Net培训 、期待与您交流! -------
 
 
 

在使用Python来安装geopandas包时,由于geopandas依赖于几个其他的Python库(如GDAL, Fiona, Pyproj, Shapely等),因此安装过程可能需要一些额外的步骤。以下是一个基本的安装指南,适用于大多数用户: 使用pip安装 确保Python和pip已安装: 首先,确保你的计算机上已安装了Python和pip。pip是Python的包管理工具,用于安装和管理Python包。 安装依赖库: 由于geopandas依赖于GDAL, Fiona, Pyproj, Shapely等库,你可能需要先安装这些库。通常,你可以通过pip直接安装这些库,但有时候可能需要从其他源下载预编译的二进制包(wheel文件),特别是GDAL和Fiona,因为它们可能包含一些系统级的依赖。 bash pip install GDAL Fiona Pyproj Shapely 注意:在某些系统上,直接使用pip安装GDAL和Fiona可能会遇到问题,因为它们需要编译一些C/C++代码。如果遇到问题,你可以考虑使用conda(一个Python包、依赖和环境管理器)来安装这些库,或者从Unofficial Windows Binaries for Python Extension Packages这样的网站下载预编译的wheel文件。 安装geopandas: 在安装了所有依赖库之后,你可以使用pip来安装geopandas。 bash pip install geopandas 使用conda安装 如果你正在使用conda作为你的Python包管理器,那么安装geopandas和它的依赖可能会更简单一些。 创建一个新的conda环境(可选,但推荐): bash conda create -n geoenv python=3.x anaconda conda activate geoenv 其中3.x是你希望使用的Python版本。 安装geopandas: 使用conda-forge频道来安装geopandas,因为它提供了许多地理空间相关的包。 bash conda install -c conda-forge geopandas 这条命令会自动安装geopandas及其所有依赖。 注意事项 如果你在安装过程中遇到任何问题,比如编译错误或依赖问题,请检查你的Python版本和pip/conda的版本是否是最新的,或者尝试在不同的环境中安装。 某些库(如GDAL)可能需要额外的系统级依赖,如地理空间库(如PROJ和GEOS)。这些依赖可能需要单独安装,具体取决于你的操作系统。 如果你在Windows上遇到问题,并且pip安装失败,尝试从Unofficial Windows Binaries for Python Extension Packages网站下载相应的wheel文件,并使用pip进行安装。 脚本示例 虽然你的问题主要是关于如何安装geopandas,但如果你想要一个Python脚本来重命名文件夹下的文件,在原始名字前面加上字符串"geopandas",以下是一个简单的示例: python import os # 指定文件夹路径 folder_path = 'path/to/your/folder' # 遍历文件夹中的文件 for filename in os.listdir(folder_path): # 构造原始文件路径 old_file_path = os.path.join(folder_path, filename) # 构造新文件名 new_filename = 'geopandas_' + filename # 构造新文件路径 new_file_path = os.path.join(folder_path, new_filename) # 重命名文件 os.rename(old_file_path, new_file_path) print(f'Renamed "{filename}" to "{new_filename}"') 请确保将'path/to/your/folder'替换为你想要重命名文件的实际文件夹路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值