通讯录

来源:互联网 发布:淘宝买灯靠谱吗 编辑:程序博客网 时间:2024/04/27 08:10

main.m

#import <Foundation/Foundation.h>

#import "ColorManage.h"
#import "NewColorManage.h"
//处理工程文件crayons.txt中的文本信息,文本内容是关于颜色的,每行都是一个颜色的信息,Almond #EED9C4,前一个字符串是颜色的名称,后一个字符串是颜色的16进制色值,处理文本完成如下需求
//1、使用字典管理所有的颜色,即字典中存储的是多个键值对,颜色名称为key,16进制颜色值(不带#)是value。
//2、取出所有的key,升序排列。
//3、取出所有的value,按照排序后的key排列。
//4、使用一个新的字典管理颜色,对颜色进行分类管理,即:“A”,“B”,“C”…即这个字典包含多个键值对,key是26个字母,value是数组,数组里存放的是Color对象(包含name和colorValue)。需要自己创建Color类。
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
//        //读取文件
//        NSString * path = @"/Users/lanouhn/Desktop/练习/4周oc/zuoye/crayons副本.txt";
//        NSString * str = [NSString stringWithContentsOfFile:path
//                                                   encoding:NSUTF8StringEncoding
//                                                      error:nil];
////        NSLog(@"%@", str);
//
//        NSArray * lineValueArray = [str componentsSeparatedByString:@"\n"];
//        NSLog(@"%@", lineValueArray);
//        NSMutableArray * keyArray = [NSMutableArray arrayWithCapacity:1];
//        NSMutableArray * valueArray = [NSMutableArray arrayWithCapacity:1];
//        
//        for (int i = 0; i < [lineValueArray count]; i++) {
//             NSString * oneLine = [lineValueArray objectAtIndex:i];
//             NSArray * colorAndCode = [oneLine componentsSeparatedByString:@" #"];
//            
//             NSString * colorWords = [colorAndCode firstObject];
//             NSString * colorCode = [colorAndCode lastObject];
//            [keyArray addObject:colorWords];
//            [valueArray addObject:colorCode];
//            
//            //查看每行 颜色 和 16进制值是否分割开, 并输出
//            NSLog(@"%@", colorAndCode);
//        }
//        NSLog(@"keyArray:   ------   %@", keyArray);
//        NSLog(@"valueArray: --------  %@", valueArray);
        
        
        
        
        
        
        
//        ColorManage * manage = [[ColorManage alloc] init];
        //NSLog(@"keyValue: %@", [[manage colorManageDictionary] allKeys]);
        

        //将key 按照升序的顺序排列
//        NSArray * keyArrayOrderdAscending = [manage allKeySortOrderByAsc];
//        NSLog(@"----------%@", keyArrayOrderdAscending);

        
        
        //查看和升序相对应的  value值
//        NSArray * valueArrayFollowAscendKey = [manage allValueFollowAscendKey];
//        NSLog(@"valueArrayFollowAscendKey ...... .... ...%@", valueArrayFollowAscendKey);

        
        
        
        NewColorManage * newManage = [[NewColorManage alloc] init];
        
        [newManage getAGroupByGroupName:@"U"];

    }
    return 0;

}







ColorManage.h

@interface ColorManage : NSObject
{
    NSMutableDictionary * _colorManageDictionary;
}

- (NSMutableDictionary *)colorManageDictionary;

- (NSArray *)allKeySortOrderByAsc;

- (NSArray *)allValueFollowAscendKey;

@end

implementation.m

  @implementation ColorManage
- (id) init {
    self = [super init];
    if (self) {
        /*  思路
            1   读取文件, 将文件转成 NSString类型的变量, (文件读到内存中, 作为1 个NSString变量来使用)
            2   对该变量   按 "\n" 来分割, 返回是一数组, 数组中每个元素 (表现为每行)单独作为一个内容
            3  对一行的内容   按照  " #"分割, 其中, " #"前的字符串作为 字典的key使用, " #"之后字符串作为字典
                的value 来使用
            4 将每行得到的  key    添加到  key的数组中(此时需要一个可变数组)
                          value  添加到  value的数组中(此时这个数组也是可变数组)
                每行 的  key, value  都添加到对应的数组中,
            5  创建一个字典变量, 将 第4步 得到的 key数组, value数组 都 直接作为字典的key, value 数组
         */
        
        //读取文件
        NSString * path = @"/Users/lanouhn/Desktop/练习/4周oc/zuoye/crayons副本.txt";
        //将文件转换成  NSString类型
        NSString * str = [NSString stringWithContentsOfFile:path
                                                   encoding:NSUTF8StringEncoding
                                                      error:nil];
        //将读取到得文件输出, 做为调试用
//          NSLog(@"%@", str);//调试用, 可省
        
        //将读取到得文件按行进行分割 , 按照 "\n" 来分割, 返回一个数组
        NSArray * lineValueArray = [str componentsSeparatedByString:@"\n"];
        //查看分割后的每行内容,
//        NSLog(@"%@", lineValueArray);//  调试用, 可省去
        
        //定义一个可变数组, 保存键,初始化容量为1, 之后给其中添加键
        NSMutableArray * keyArray = [NSMutableArray arrayWithCapacity:1];
        //定义可变数组, 用来保存值, 初始化容量为1, 每发现一个值, 将  值添加到数组
        NSMutableArray * valueArray = [NSMutableArray arrayWithCapacity:1];
        
        //遍历每行
        for (int i = 0; i < [lineValueArray count]; i++) {
            //取出一行的内容
            NSString * oneLine = [lineValueArray objectAtIndex:i];
            //将 一行的内容按照 " #"分割, 得到一个数组, 数组中两个元素, 前者作为 key添加到 字典的
            //keyArray中, 后者作为  value 添加到字典的 valueArray中
            NSArray * colorAndCode = [oneLine componentsSeparatedByString:@" #"];
            //定义变量, 保存数组中的第一个元素, 此变量作为字典的 key
            NSString * colorWords = [colorAndCode firstObject];
            //定义变量, 保存数组中的最后一个元素, 此变量作为字典的  value
            NSString * colorCode = [colorAndCode lastObject];
            //将  colorWords作为 一个 key 添加到对应的  键数组中去
            [keyArray addObject:colorWords];
            //静   colorCode作为 一个 value添加到对应的  值数组中去
            [valueArray addObject:colorCode];
            
            //查看每行 颜色 和 16进制值是否分割开, 并输出
//            NSLog(@"%@", colorAndCode);//调试用, 可省去
        }
        //创建 字典变量, 使用以生成的  keyArray数组 作为 字典的 键数组, valueArray 作为值数组
        _colorManageDictionary = [NSMutableDictionary dictionaryWithObjects:valueArray
                                                                    forKeys:keyArray];
        //查看keyArray数组
//        NSLog(@"keyArray:   ------   %@", keyArray);
        //查看valuArray数组
//        NSLog(@"valueArray: --------  %@", valueArray);
        
        //字典的 所有  键
//        NSLog(@"...........%@", [_colorManageDictionary allKeys]);

    }
    return self;
}
- (NSMutableDictionary *)colorManageDictionary {
    return _colorManageDictionary;
}

- (NSArray *)allKeySortOrderByAsc {
     //取出 键数组
     NSArray * keyArray = [_colorManageDictionary allKeys];
    //将排好序的键数组保存在另外的新数组中
     NSArray * newKeyArray = [keyArray sortedArrayUsingSelector:@selector(compare:)];
    //查看排好序的数组内容,
//     NSLog(@"%@", newKeyArray);//调试用, 可省
     return newKeyArray;
}


- (NSArray *)allValueFollowAscendKey {
    
    /*                          思路
     
        1 定义一个数组, 保存排好序的key数组, 所以此数组是有序的
        2 依次取出数组中的元素, 将其作为字典的关键字, 来查找对应的  value值, 查找出来, 将value值添加到可变数组中去
        3 此时  可变数组中的元素就是和  升序的key 保持一致的  value值
     
     */
 
    //定义可变数组, 用来存放和升序的key相对应的value
    NSMutableArray * colorCodeArray = [NSMutableArray arrayWithCapacity:1];
    //保存已经排好序的key
    NSArray * keyArrayOrder = [self allKeySortOrderByAsc];
    //依次遍历排好序的 key数组
    for (int i = 0; i < [keyArrayOrder count]; i++) {
        //取出key数组中的每个元素
         NSString * colorWords = [keyArrayOrder objectAtIndex:i];
        //将数组中的数组, 作为key, 取出对应的 value值
         NSString * colorCode = [_colorManageDictionary objectForKey:colorWords];
        //将value 添加在可变数组中
        [colorCodeArray addObject:colorCode];
    }
    //将可变数组转成不可变数组
    NSArray * array = [NSArray arrayWithArray:colorCodeArray];
    //NSLog(@"%@", array);
    return array;
}

@end


Color.h

@interface Color : NSObject
{
    NSString * _name;
    NSString * _value;
}
- (void)setName:(NSString *)name;
- (void)setValue:(NSString *)value;
- (id)initWithName:(NSString *)name
             value:(NSString *)value;
@end


Color.m

#import "Color.h"

@implementation Color
- (void)setName:(NSString *)name {
    _name = name;
}
- (void)setValue:(NSString *)value {
    _value = value;
}
- (id)initWithName:(NSString *)name
             value:(NSString *)value {
    self = [super init];
    if (self) {
        _name = name;
        _value = value;
    }
    return self;
}
- (NSString *)description {
    return [NSString stringWithFormat:@"name:---%@   value:----- %@",
            _name, _value];
}

@end


NewColorManage.h

#import <Foundation/Foundation.h>
//4、使用一个新的字典管理颜色,对颜色进行分类管理,即:“A”,“B”,“C”…即这个字典包含多个键值对,key是26个字母,value是数组,数组里存放的是Color对象(包含name和colorValue)。需要自己创建Color类。

@interface NewColorManage : NSObject
{
    NSMutableDictionary * _colorManageDictionary;
}

- (NSArray *)getAGroupByGroupName:(NSString *)groupName;
@end


NewColorManage.m

#import "NewColorManage.h"
//4、使用一个新的字典管理颜色,对颜色进行分类管理,即:“A”,“B”,“C”…即这个字典包含多个键值对,key是26个字母,value是数组,数组里存放的是Color对象(包含name和colorValue)。需要自己创建Color类。
#import "Color.h"
@implementation NewColorManage

- (id)init {
    self = [super init];
    if (self) {
        // A...Z 构成的是 key数组,
        NSArray * keyArray = [NSArray arrayWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G",
         @"H", @"I", @"J", @"K", @"L", @"M", @"N",
         @"O", @"P", @"Q", @"R", @"S", @"T", @"U",
         @"V", @"W", @"X", @"Y", @"Z", nil];
        //定义  value数组,设置为一个可变数组, 初始容量是1
        NSMutableArray * valueArray = [NSMutableArray arrayWithCapacity:1];
        // 以  key数组个数作为循环执行的条件, 确保, 生成的 键 和 值 是一一对应的
        for (int i = 0; i < [keyArray count]; i++) {
            //定义一个可变数组, 将数组作为一个元素添加到 value数组中去
            NSMutableArray * oneGroup = [NSMutableArray arrayWithCapacity:1];
            //为value数组添加成员, 循环结束后, value数组中 有26个成员, 成员均是可变数组
            [valueArray addObject:oneGroup];
        }
        //创建可变数组, 使用 其上  的 keyArray, valueArray, 作为 键数组, 值数组
        _colorManageDictionary = [NSMutableDictionary dictionaryWithObjects:valueArray
                                                                  forKeys:keyArray];
        
        
        /*-------------------------------------------------------
         ----之上是初始化一个字典实例变量, 包括创建key数组, 和value数组(仅仅设置了是------
         ----可变数组类型,数组内部有26个可变数组)------
         
         
         
         
         
         ------以下是为字典中的每个  值(此时类型是一个可变数组) 设置数组中的成员----
         
         --------------------------------------------------------*/
        //文件存放路径
        NSString * path = @"/Users/lanouhn/Desktop/练习/4周oc/zuoye/crayons副本.txt";
        //将文件转换成  NSString类型
        NSString * str = [NSString stringWithContentsOfFile:path
                                                   encoding:NSUTF8StringEncoding
                                                      error:nil];
        //以"\n"作为分割 条件, 读到内存时时一个整体 所以需要进行分割, 结果为每行作为1 个数组成员
        NSArray * lineValueArray = [str componentsSeparatedByString:@"\n"];
        //遍历生成的数组
        for (int i = 0; i < [lineValueArray count]; i++) {
            //取出分割后读数组成员, 体现为 每行的内容
            NSString * oneLine = [lineValueArray objectAtIndex:i];
            //将一行按照  " #"再次分割, 构成一个数组, 数组中又两个成员, 前者作为 颜色名字,传递给
            // Color的name变量, 后者作为  Color的value变量
            NSArray  * wordAndCode = [oneLine componentsSeparatedByString:@" #"];
            //取出由 " #"分割的数组中的第一个成员
            NSString * colorName = [wordAndCode firstObject];
            //取出由 " #"分割的数组中的最后一个成员
            NSString * colorValue = [wordAndCode lastObject];
            //创建一个 Color类的对象, name 和 value 是 上面的colorName 和 volor变量
            Color    * colorNeedAdded = [[Color alloc] initWithName:colorName
                                                           value:colorValue];
           //第二次遍历, 查看 keyArray(键数组) 中的每个成员
            for (int j = 0; j < [keyArray count]; j++) {
                //取出  keyArray数组中的每个成员
                NSString * oneKey = [keyArray objectAtIndex:j];
                //判断 Color对象的 name(名字)是否包括  键 字符, 若包含,则将Color添加到
                //字典的 键对应的value(为一个可变数组)中去
                if ( [colorName hasPrefix:oneKey]) {
                    //取出 变量oneKey对应的value(在此是可变数组),
                    NSMutableArray * oneValue = [_colorManageDictionary objectForKey:oneKey];
                    //最后将Color添加到 这个可变数组中去
                    [oneValue addObject:colorNeedAdded];
                }
            }
        }

        //查看字典中的键  和 值数组
        NSLog(@"keycounter:   %lu -----%@", [keyArray count], keyArray);
        NSLog(@"valuecounter: %ld -----%@", [valueArray count], valueArray);
    }
    return self;
}
- (NSArray *)getAGroupByGroupName:(NSString *)groupName {
    //根据键, 查找对应的  值, 得到一个可变数组
    NSMutableArray * group = [_colorManageDictionary objectForKey:groupName];
    //将可变数组转换成不可变数组
    NSArray * newGroup = [NSArray arrayWithArray:group];
    //查看一下  最后得到得数组元素内容
//    NSLog(@"%@------   %@", groupName, newGroup);   //可省
    return newGroup;

}


@end


0 0
原创粉丝点击