通讯录
来源:互联网 发布:淘宝买灯靠谱吗 编辑:程序博客网 时间: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