Objective-C处理形如下面的数据
北京 1
北京市 1
西城区 1
东城区 2
崇文区 3
宣武区 4
朝阳区 5
丰台区 6
石景山区 7
海淀区 8
门头沟区 9
房山区 10
通州区 11
顺义区 12
昌平区 13
大兴区 14
怀柔区 15
平谷区 16
密云区 17
延庆区 18
天津 2
天津市 2
和平区 19
河东区 20
河西区 21
南开区 22
河北区 23
红桥区 24
塘沽区 25
汉沽区 26
大港区 27
东丽区 28
西青区 29
津南区 30
北辰区 31
武清区 32
宝坻区 33
宁河县 34
静海县 35
蓟县 36
具体思路:通过数据前空格的不同,处理数据。
NSString *filePath = @"/Users/dlios/Desktop/homework/demo_oc_11/demo_oc_11/area.txt";//提取txt文件路径
NSString *buffer = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];//将文件数据转换成字符串
NSArray *array = [buffer componentsSeparatedByString:@"\n"];//通过换行将数据分离成一个个字符串,放入数组
NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString:@" 0123456789"];//创建一个字符集
数据初始处理后,创建一个节点的类TreeNode
属性包括:*name节点名,*subNodes子节点,*superNode父节点
创建方法:
1、通过名字找到相对应的子节点。
- (TreeNode *)getSubnodeWithName:(NSString *)name
{
TreeNode *node = nil;
for (TreeNode *snode in self.subnodes) {
if ([[node name] isEqualToString:name]) {
node = snode;
break;
}
}
return node;
}
2、通过名字找到该节点的所有节点
- (TreeNode *)getAnyNodeWithName:(NSString *)name
{
TreeNode *node = nil;
if ([[self name] isEqualToString:name]) {
node = self;
}else{
for (TreeNode *snode in self.subnodes) {
node = [snode getAnyNodeWithName:name];
if (node != nil) {
break;
}
}
}
return node;
}
3、打印节点的所有子节点的名字
+ (void)traverseAllNode:(TreeNode *)root
{
NSLog(@"%@", root.name);
for (TreeNode *node in root.subnodes) {
[self traverseAllNode:node];
}
}
4、得到节点下的所有子节点的名字
- (NSString *)getFullName
{
NSMutableString *string = [NSMutableString string];
TreeNode *node = self;
while (node) {
[string insertString:[node name] atIndex:0];
node = [node superNode];
}
return string;
}
主函数中数据的具体实现:
TreeNode *root = [TreeNode treeNodeWithName:@"china"];
for (NSString *s in array) {
//找的父节点
TreeNode *parentNode = root;
NSRange r = NSMakeRange(0, 2);
NSString *s1 = [s substringWithRange:r];
while ([s1 isEqualToString:@" "]) {
parentNode = [parentNode.subnodes lastObject];
r.location += 2;
s1 = [s substringWithRange:r];
}
//创建子节点
NSString *nodeName = [s stringByTrimmingCharactersInSet:cSet];
TreeNode *childNode = [TreeNode treeNodeWithName:nodeName];
[parentNode.subnodes addObject:childNode];
[childNode setSuperNode:parentNode];
}
将数据封装好,即可使用节点名字找到对应的节点
如:
TreeNode *node = [root getAnyNodeWithName:@"河东区"];
NSLog(@"%@", [node getFullName]);