省市
来源:互联网 发布:软件开发 证书 编辑:程序博客网 时间:2024/04/29 05:31
//
// TreeNode.h
// 省市
//
// Created by dlios on 15/2/4.
// Copyright (c) 2015年 dllo. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface TreeNode : NSObject
@property(nonatomic, retain) NSString *name;
@property(nonatomic, retain) NSMutableArray *subnodes;//子节点
@property(nonatomic, assign) TreeNode *superNode;
//父对象在其生命周期可以强引子对象,而子对象绝对不可以强引父对象(造成两个对象无法释放)(所以使用assign)
- (id)initWithName:(NSString *)name;
+ (id)treeNodeWithName:(NSString *)name;
- (TreeNode *)getSubnodeWithName:(NSString *)name;
- (TreeNode *)getAnyNodeWithName:(NSString *)name;
+ (void)traverseAllNodes:(TreeNode *)root;
- (NSString *)getFullName;
@end
#import "TreeNode.h"
@implementation TreeNode
- (void)dealloc
{
[_name release];
[_subnodes release]; //[_superNode release]不可以写
//父对象在其生命周期可以强引子对象,而子对象绝对不可以强引父对象(造成两个对象无法释放)
[super dealloc];
}
- (id)initWithName:(NSString *)name
{
self = [super init];
if (self) {
[self setName:name];
[self setSubnodes:[NSMutableArray array]];
[self setSuperNode:nil];
}
return self;
}
+ (id)treeNodeWithName:(NSString *)name
{
TreeNode *node = [[TreeNode alloc] initWithName:name];
return [node autorelease];
}
- (TreeNode *)getSubnodeWithName:(NSString *)name
{
TreeNode *node = nil;
for (TreeNode *nd in [self subnodes]) {
if ([[nd name] isEqualToString:name]) {
node = nd;
break;
}
}
return node;
}
+ (void)traverseAllNodes:(TreeNode *)root
{
NSLog(@"%@", [root name]);
for (TreeNode *node in [root subnodes]) {
[self traverseAllNodes:node]; //类中的self代表类对象的首地址
//同上:[TreeNode treeNodeWithName:node];
}
}
- (TreeNode *)getAnyNodeWithName:(NSString *)name
{
TreeNode *node = nil;
if ([[self name] isEqualToString:name]) {
node = self;
} else {
for (TreeNode *snode in [self subnodes]) {
// if ([[snode name] isEqualToString:name]) {
// node = snode;
// break;
// } else {
node = [snode getAnyNodeWithName:name];
if (node != nil) {
break;
}
//}
}
}
return node;
}
- (NSString *)getFullName
{
NSMutableString *fullName = [NSMutableString string];
TreeNode *node = self;
while (node) {
[fullName insertString:[node name] atIndex:0];
node = [node superNode];
}
return fullName;
}
@end
#import <Foundation/Foundation.h>
#import "TreeNode.h"
int main(int argc, const char * argv[]) {
NSString *filePath = @"/Users/dllo/Desktop/省市/area副本.txt";
NSString *buffer = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [buffer componentsSeparatedByString:@"\n"];
NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString:@" 0123456789"];
TreeNode *root = [TreeNode treeNodeWithName:@"root"];
for (NSString *s in array) {
//找到父结点
TreeNode *parentNode = root;
NSRange r = NSMakeRange(0, 2);
NSString *s1 = [s substringWithRange:r];
while ([s1 isEqualTo:@" "]) {
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]);
@end
- 省市
- 省市
- 省市互连
- 省市级联
- 省市查询
- 省市级联
- 省市级联
- 省市级联
- 省市数据库
- 省市选择器
- 省市联动
- 加载省市:
- 省市数据库
- 省市选择器
- 省市选择
- 省市数据库
- 省市联动
- 省市下拉
- Copying Books - UVa 714 dp
- OC学习里面的一些概念(一)
- 7 全屏 小球下落
- iOS8.1.3下Inhouse App无法安装问题
- 【BZOJ 2326】 [HNOI2011]数学作业
- 省市
- findstr 命令详解
- 巴菲特致股东的一封信:1999年
- python学习笔记之codecademy
- A and B and Interesting Substrings - CodeForces 519 D dp
- 巴菲特致股东的一封信:1998年
- OC学习里面的一些概念(二)
- OpenNi 资料
- RS232电平 RS485电平 RS422电平