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

时间: 2024-08-02 20:11:24

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

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方

* 类描述:字符串工具类 类名称:String_U

/****************************************** * 类描述:字符串工具类 类名称:String_U * ******************************************/ public class String_U { private String_U() { } /** * 检查手机号是否合法 * * @param phoneNum * @return boolean true 为手机号合法,false为手机号不合法 */ publi

Oracle使用游标查询指定数据表的所有字段名称组合而成的字符串

应用场合:参考网上查询数据表的所有字段名代码,使用游标生成指定单个表的所有字段名跟逗号组成的用于select  逗号隔开的字段名列表 from字符串等场合. 查询结果输出如下: 当前数据表TB_UD_USER的字段列表字符串为AH,BIRTHPLACE,BM,CELLPHONE,CJGZRQ,DEPARTMENT2,DJJID,GZCX,GZKH,GZSFZH,HJDZ,HYZK,ID,JHRQ,JTZZ,LAFX_LD,LJDZ,LLY,LXDH,NAME,NXDH,POLICENUMBER,

oc将字符串中单词按照出现次数(次数都不一样)降序排序,排序之后单词只出现一次,源字符串中单词用下划线连接,生成字符串也用下滑线连接

/* 将字符串中单词按照出现次数(次数都不一样)降序排序,排序之后单词只出现一次,源字符串中单词用下划线连接,生成字符串也用下滑线连接(10分) 如传入:@"good_good_study_good_study" 返回:@"good_study" 如传入:@"I_love_I_hate_love_love" 返回:@"love_I_hate" */ 方法1:选择排序 -(NSString *)sortStringByNumbe

字符串、列表、元组、字典、参数

python_two_day 作者:_晓冬 归档:学习笔记 2016/9/16 目  录 第1章... 1 1.1 可变和不可变类型... 1 第2章 字符串类型... 1 2.1 [重点]字符串取值方法... 1 2.2 [了解]字符串方法... 1 2.3 练习题... 2 2.4 打破顺序位置占位... 3 2.5 辨别find,rfind,index,rindex,ocunt 3 2.6 判断数字... 4 第3章 列表类型... 5 3.1 其他操作... 7 第4章 元组... 10

python :字符串,列表,集合,字典

字符串方法: 字符串是一个有序的,不可修改的,元素是以引号包围的序列.单引号,双引号,三引号,str生成 字符串的修饰   a='novo gene' a.center() 让字符串在指定的长度居中显示,如果不能居中,默认以空格填充 -a.center(20,'*')  返回一个原字符串居中,并使用'*'填充至长度20的新字符串 a.ljust() 让字符串左对齐,默认以空格填充   a.rjust() 让字符串右对齐,默认以空格填充   a.zfill() 让字符串填充到指定的长度,不足的地方

[转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 del sample_list[0] 在列表中插入一个值 sample_list[0:0] = ['sample value'] 得到列表的长度 list_length = len(sa

Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

[python] view plaincopy 创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 del sample_list[0] 在列表中插入一个值 sample_list[0:0] = ['sample value'] 得到列表

JS 中数组字符串索引和数值索引研究

先来看一个问题: var array = []; array["a"] = "hello"; array["b"] = "world"; array["c"] = "yes"; console.log("length: " + array.length);//0 在之前看过的许多javascript书籍中,都宣称js是可以使用字符串作为数组下标的,因此我在用的时候也没