OC习题 切分字符串 处理色值和名称 (知识点: 字典,枚举,数组,字符串)

/* 处理工程文件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类。
 */
main.m
int main(int argc, const char * argv[]) {
    @autoreleasepool {
     //1 从文件中读取字符串
        NSString *txtStr = [NSString stringWithContentsOfFile:@"/Users/lanou3g/Desktop/Zc4d5/crayons.txt" encoding:NSUTF8StringEncoding error:nil];
        NSLog(@"原序列");
        NSLog(@"%@",txtStr);
        //2 通过"\n"进行切割
        NSLog(@"======================================================");
        NSArray *txtStrs = [txtStr componentsSeparatedByString:@"\n"];
        NSLog(@"通过\n进行切割  %@",txtStrs);
        //3 创建颜色字典
        NSMutableDictionary *colorDic = [[NSMutableDictionary alloc] init];
        //4 遍历数组
        for (NSString *colorStr in txtStrs) {
            //对颜色字符串进行" #"切割
            NSArray *arr = [colorStr componentsSeparatedByString:@" #"];
            //创建键值对象 存入字典
            [colorDic setValue:arr[1] forKey:arr[0]];
        }
        NSLog(@"%@",colorDic);
        
        
        //获取所有的key 并进行排序
        NSArray *sortedKeys = [[colorDic allKeys]sortedArrayUsingSelector:@selector(compare:)];
        //获取所有的Value 要求顺序和key一样
        //1. 创建空的数组
        NSMutableArray *sortedValues = [[NSMutableArray alloc]init];
        //2 遍历排序后的key数组
        for (NSString *key in sortedKeys) {
            NSString *value = [colorDic valueForKey:key];
            //放入数组中
            [sortedValues addObject:value];
        }
        NSLog(@"sortedKeys  %@",sortedKeys);
        NSLog(@"sortedValues  %@",sortedValues);
        
        
        //1 创建管理颜色对象的大字典
        NSMutableDictionary *newColorDic = [[NSMutableDictionary alloc]init];
        //2 遍历 颜色数据字典
        for (NSString *key in colorDic) {
            //获取对应的value
            NSString *value = [colorDic valueForKey:key];
            //对象的封装
            Color *color  = [[Color alloc]initWithName:key ColorValue:value];
            //获取首字母
            NSString *first = [[key substringToIndex:1]uppercaseString];
            //获取颜色分组
            NSMutableArray *colorArr = [newColorDic valueForKey:first];
            if (colorArr == nil) {
                //如果对应颜色分组不存在 就创建分组
                colorArr = [[NSMutableArray alloc]init];
                //把颜色分组放入颜色大字典中
                [newColorDic setValue:colorArr forKey:first];
            }
               [colorArr addObject:color];
        }
        NSLog(@"%@",newColorDic);
    }
    return 0;
}

Color.m

#import "Color.h"

@implementation Color
-(id)initWithName:(NSString *)name ColorValue:(NSString *)ColorValue
{
    self = [super init];
    if (self) {
        _name = name;
        _ColorValue =ColorValue;
    }
    return self;
}

-(NSString *)description
{
    return [NSString stringWithFormat:@"color: %@ %@",_name,_ColorValue];
}

@end

原文地址:https://www.cnblogs.com/fzkwan5438020/p/5067390.html