C25_OC15-OC集合类

1.NSArray数组

//
//  main.m
//  foundation框架
//
//  Created by vigiles on 14-5-10.
//  Copyright (c) 2014年 beardap. All rights reserved.
//

#import <Foundation/Foundation.h>

void test()
{
    /** 这两个永远是空数组 **/
    NSArray * arr1 = [NSArray new];
    NSArray * arr2 = [NSArray array];
    
    /** OC数组只能存放OC对象,且不能存放“nil” **/
    /** OC数组只能在创建时初始化 **/
    // 只有一个元素
    NSArray * arr3 = [NSArray arrayWithObject:@"只有一个元素"];
    // 多个元素
    NSArray * arr4 = [NSArray arrayWithObjects:@"第一个元素", @"第二个元素", @"第三个元素", nil];
    
    NSArray * arr5 = @[@"第1个元素", @"第2个元素", @"第3个元素"];
    
    /** 使用 **/
    // 点方法获取数组长度-元素个数
    arr4.count;
    // 消息指令获取元素个数
    [arr4 count];
    // 类方法根据索引获取元素
    [arr4 objectAtIndex:2];
    // C模式根据索引获取元素
    arr4[0];
    
    // 遍历元素
    for (id obj in arr5) {
        // 获取元素的索引
        [arr5 indexOfObject:obj];
        
        NSLog(@"%@", obj);
    }
    
    // 使用Block遍历元素
    [arr5 enumerateObjectsUsingBlock:
     // 每枚举一条记录,即更新id、idx、*stop
     ^(id obj, NSUInteger idx, BOOL *stop) {
         NSLog(@"%ld - %@", idx, obj);
         
         // 终止遍历
         if (idx == 1) *stop = YES; // 注意:是*stop
     }
     ];
}

void codeLineCount(NSString *path){
	
	// 1. 文件资源管理器
	// 整个程序运行中只有一个NSFM对象-单例
	NSFileManager *nsfm = [NSFileManager defaultManager];
	
	BOOL dir = NO;	// 是否为目录
	// 2. 判断路径是否存在,是否为目录
	BOOL exist = [nsfm fileExistsAtPath:path isDirectory:&dir];	// 如果是文件夹,赋值dir为YES
    
	// 3. 不存在就退出
	if (!exist) return;
	
	// 4. 如果是目录
	if (dir) {	// 文件夹
		NSLog(@"文件夹");
		
		// 4-1. 当前目录中全部资源
		NSArray * arr = [nsfm contentsOfDirectoryAtPath:path error:nil];
		
		// 4-2. 遍历当前目录里的全部资源
		for (NSString * file in arr) {
            
			// 4-3. 目录内子资源的全路径
			NSString * filePath = [NSString stringWithFormat:@"%@/%@", path, file];
			
			// 4-4. 递归。计算子资源路径
			codeLineCount(filePath);
		}
	}
    
	// 5. 如果是文件
	else{
		NSLog(@"文件");
        
		// 5-1 过滤文件扩展名
		NSString * extension = [path pathExtension];
		// 转为小写,匹配
		if (![[extension lowercaseString] isEqualToString:@"txt"] &&
            ![[extension lowercaseString] isEqualToString:@"m"]   &&
            ![[extension lowercaseString] isEqualToString:@"h"]
            ) return;
		
		// 5-2 加载文本
		NSString * content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
		
		//NSLog(@%@, content);
		
		// 5-3 统计文本行数
		// componentsSeparatedByString根据指定分割符拆分字串到数组
		NSArray * array = [content componentsSeparatedByString:@"\n"];
		
		NSLog(@"%@的文本行数:%d", path, array.count);
    }
}

int main(){
    test();
    
	codeLineCount(@"/Users/vigiles/Desktop/oc_workspace");
    
    return 0;
}

2.NSMutableArray可变数组

#import <Foundation/Foundation.h>

int main(){
    
    /** 可变数组创建 **/
    NSMutableArray * mutArr1 = [NSMutableArray new];
    NSMutableArray * mutArr2 = [NSMutableArray array];
    NSMutableArray * mutArr3 = [[NSMutableArray alloc] init];
    NSArray * nsarray = @[@"111", @"222", @"333"];
    NSMutableArray * mutArr4 = [[NSMutableArray alloc] initWithArray:nsarray];
    NSMutableArray * mutArr5 = [NSMutableArray arrayWithObjects:@"yyyy", @"eeee", @"ssss", nil];
    
    /** 删除元素 **/
    [mutArr5 removeObject:@"yyyy"];
    [mutArr5 removeAllObjects];
    
    /** 添加元素 **/
    [mutArr4 addObject:@"4444"];
    // 点方法获取数组长度-元素个数
    mutArr4.count;
    // 消息指令获取元素个数
    [mutArr4 count];
    // 类方法根据索引获取元素
    [mutArr4 objectAtIndex:2];
    // C模式根据索引获取元素
    mutArr4[0];
    
    // 遍历元素
    for (id obj in mutArr4) {
        // 获取元素的索引
        [mutArr4 indexOfObject:obj];
        
        NSLog(@"%@", obj);
    }
    
    // 使用Block遍历元素
    [mutArr4 enumerateObjectsUsingBlock:
     // 每枚举一条记录,即更新id、idx、*stop
     ^(id obj, NSUInteger idx, BOOL *stop) {
         NSLog(@"%ld - %@", idx, obj);
         
         // 终止遍历
         if (idx == 1) *stop = YES; // 注意:是*stop
     }
     ];
    
    return 0;
}

3.NSSet

#import <Foundation/Foundation.h>

int main(){
    // NSSet无序存储
    NSSet * set1 = [NSSet set]; // 空
    NSSet * set2 = [NSSet setWithObjects:@"aaaa", @"bbbb", @"cccc", nil];
    // NSSet * set3 = [NSSet setWithArray:NSSArray];    // 根据已有的数组初始化
    // NSSet * set4 = [NSSet setWithSet:[NSSet];        // 根据已有的Set初始化
    
    NSString * str = [set2 anyObject]; // 随即返回对象
    
    NSMutableSet * ms = [NSMutableSet set];
    [ms addObject:@"可变Set"]; // 添加元素
    [ms addObject:@"XXX"];
    
    [ms removeObject:@"XXX"];   // 删除指定元素
    [ms removeAllObjects];      // 删除全部元素
    
    // 是集合,都能存放多个OC对象,且不能存放非OC对象
    // 有可变子类MutableXXX
    // NSArray有顺序
    // NSSet无序
}

4.NSDictionary字典

如同 Java Map
/**
    NSDictionary 字典
    数据格式:键值对
    根据key查找value
**/

#import <Foundation/Foundation.h>

int main()
{
    // 创建方式 1   [NSDictionary 值 键]
    NSDictionary * dic = [NSDictionary dictionaryWithObject:@"值" forKey:@"键"];
    
    // 两个数组中的数据一一对应
    NSArray * keys = @[@"key.1", @"key.2", @"key.3", @"key.3"];    // 如果key重复,覆盖
    NSArray * vals = @[@"val.1", @"val.2", @"val.3", @"val.3"];
    // 创建方式 2   [NSDictionary 值数组 键数组]
    NSDictionary * dic2 = [NSDictionary dictionaryWithObjects:vals forKeys:keys];
    
    // 创建方式 3   [NSDictionary 值,键,  值,键,    值,键]
    NSDictionary * dic3 = [NSDictionary dictionaryWithObjectsAndKeys:
                           @"value01", @"key01",
                           @"value02", @"key02",
                           @"value02", @"key02",    // 如果key重复,覆盖
                           @"value03", @"key03",
                           nil];
    
    // 创建方式 4
    NSDictionary * dic4 = @{@"key-1":@"value-1",
                            @"key-2":@"value-2",
                            @"key-2":@"value-2",    // 如果key重复,覆盖
                            @"key-3":@"value-3"};
    
    // 读取方式 1
    id value = [dic objectForKey:@"键"];
    NSLog(@"键 - %@", value);
    
    // 读取方式 2
    id val = dic2[@"key.1"];
    NSLog(@"key.1 - %@", val);
    
    NSLog(@"dic,长度:%ld", [dic count]);      // 键值对的数量
    NSLog(@"dic2,长度:%ld", [dic2 count]);
    NSLog(@"dic3,长度:%ld", [dic3 count]);
    NSLog(@"dic4,长度:%ld", [dic4 count]);
    
    // 打印字典
    NSLog(@"%@", dic4);
    /**
     {
     "key-1" = "value-1";
     "key-2" = "value-2";
     "key-3" = "value-3";
     }
    **/
    
    return 0;
}

5.NSMutableDictionary可变字典

#import <Foundation/Foundation.h>

int main()
{
    // 创建方式 1   [NSDictionary 值 键]
    NSMutableDictionary * mutableDic = [NSMutableDictionary dictionary];
    
    [mutableDic setObject:@"值" forKey:@"键"];
    [mutableDic setObject:@"value" forKey:@"key"];
    [mutableDic setObject:@"val"   forKey:@"key"];  // key重复,覆盖
    
    // 根据key删除条目
    //[mutableDic removeObjectForKey:@"key"];
    
    // 根据key,取value
    NSLog(@"“键 - %@”", mutableDic[@"键"]);
    
    // 打印字典
    NSLog(@"全字典:%@", mutableDic);
    
    /** 常规方法遍历字典 **/
    NSArray * arr = [mutableDic allKeys];
    NSUInteger * integer = [mutableDic count];
    for (int i = 0; i < integer; i ++) {
        // NSString * key = [arr objectAtIndex:i];
        NSLog(@"%@ - %@", arr[i], mutableDic[arr[i]]);
    }
    
    /** 使用block代码块遍历字典 **/
    [mutableDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
        NSLog(@"%@ == %@", key, obj);
    }];
    
    return 0;
}

- end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值