用字典管理Color
处理⼯工程⽂文件crayons.txt中的⽂本信息,文本内容是关于颜色的,每行都是一 个颜色的信息,例如:Almond #EED9C4,前一个字符串是颜色的名称,后一个字符串是颜色的16进制色值,处理⽂文本完成如下需求
1、使⽤用字典管理所有的颜色,即字典中存储的是多个键值对,颜色名称为key,16进制颜色值(不带#)是value。
2、取出所有的key,升序排列。
3、取出所有的value,按照排序后的key排列。
4、使⽤用一个新的字典管理颜色,对颜色进⾏行分类管理,即:“A”,“B”,“C”... 即这个字典包含多个键值对,key是26个字母,value是数组,数组里存放的是 Color对象(包含name和colorValue)。需要⾃己创建
main.m
#import <Foundation/Foundation.h>
#import "Color.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//获取文件路径
NSString *filePath = @"/Users/lanouhn/Downloads/crayons.txt";
//读取文件中得字符串
NSString *originalString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSArray *arr = [originalString componentsSeparatedByString:@"\n"];
//NSLog(@"arr = %@", arr);
//定义一个数组用来存储所有的key
NSMutableArray *keyArr1 = [[NSMutableArray alloc] init];
//定义数组用来存储value
NSMutableArray *valueArr1= [[NSMutableArray alloc] init];
//遍历arr中的每个元素
for (NSString *p in arr) {
//定义一个数组arr2存数一个key
//componentsSeparatedByString将字符串以"#"为界限分割成两个小字符串
NSArray *arr2 = [p componentsSeparatedByString:@" #"];
//分割后,第一个字符为key,第二个为value
NSString *a = [arr2 objectAtIndex:0]; //获取key
NSString *b = [arr2 objectAtIndex:1]; //获取value
[keyArr1 addObject:a]; //key的数组
[valueArr1 addObject:b]; //value的数组
}
//定义一个字典
NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjects:valueArr1 forKeys:keyArr1];
NSLog(@"dic = %@", dic);
//2.在字典中找到所有的key --- 升序排序
NSArray *allKey = [dic allKeys];
NSArray *ascendKey = [allKey sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"ascendKey = %@", ascendKey);
//3、取出所有的value,按照排序后的key排列
// -- 创建数组存储Value
NSMutableArray *value = [[NSMutableArray alloc] init];
//遍历所有的key
for (NSString *key2 in ascendKey) {
//根据排好序的key找到Value
NSString *str = [dic objectForKey:key2];
[value addObject:str];
}
NSLog(@"%@", value);
//4、使⽤用一个新的字典管理颜色,对颜色进⾏行分类管理,即:“A”,“B”,“C”... 即这个字典包含多个键值对,key是26个字母,value是数组,数组里存放的是 Color对象(包含name和colorValue)。需要⾃己创建Color类。
//创建新的字典
NSMutableDictionary *newDic = [[NSMutableDictionary alloc] init];
//遍历所有的KeyArr1, 取首字母
for (NSString *colorName in keyArr1) {
//取出原字典的key(firstArr)作为新字典的key
NSString *firstArr = [colorName substringToIndex:1];
NSMutableArray *value2 = newDic[firstArr]; //根据key查找value
//创建一个Color类的对象
Color *color = [[Color alloc] initWithName:colorName colorValue:dic[colorName]];
//如果value不存在,重新创建一个数组
if (!value2) {
value2 = [NSMutableArray arrayWithCapacity:1];
[newDic setObject:value2 forKey:firstArr];
[value2 addObject:color];
} else {
//如果存在value,直接将color增加到数组
[value2 addObject:color];
}
}
NSLog(@"%@", newDic);
}
return 0;
}
Color.h
#import <Foundation/Foundation.h>
@interface Color : NSObject {
NSString *_name;
NSString *_colorValue;
}
- (void)setName:(NSString *)name;
- (NSString *)name;
- (void)setColorValue:(NSString *)colorValue;
- (NSString *)colorValue;
- (id)initWithName:(NSString *)name colorValue:(NSString *)colorValue;
@end
Color.m
#import "Color.h"
@implementation Color
- (void)setName:(NSString *)name {
_name = name;
}
- (NSString *)name {
return _name;
}
- (void)setColorValue:(NSString *)colorValue {
_colorValue = colorValue;
}
- (NSString *)colorValue {
return _colorValue;
}
- (id)initWithName:(NSString *)name colorValue:(NSString *)colorValue {
self = [super init];
if (self) {
_name = name;
_colorValue = colorValue;
}
return self;
}
- (NSString *)description {
return [NSString stringWithFormat:@"name = %@, colorValue = %@", _name, _colorValue];
}
@end