oc地图

来源:互联网 发布:普通话考试难不难知乎 编辑:程序博客网 时间:2024/06/05 23:49

.h文件

#import <Foundation/Foundation.h>


@interface TreeNode : NSObject

@property (nonatomic, retain)NSString *name;

@property (nonatomic, retain)NSMutableArray *subnodes;//子节点

//父对象会强引用子对象,子对象不能强引用父对象(子对象强引用父对象会造成:循环引用会造成内存空洞)

//父对象在生命周期内会对子对象引用计数器+1,如果子对象强引用父对象会造成父对象引用计数器+1,彼此释放时都持有最后一次造成内存空洞

@property (nonatomic, assign)TreeNode *superNode;     //父节点


- (id)initWithName:(NSString *)name;

+ (id)treeNodeWithName:(NSString *)name;


- (TreeNode *)getSubnodeWithName:(NSString *)name;


- (TreeNode *)getAnyNodeWithName:(NSString *)name;

//遍历所有节点

+ (void)traverseAllNode:(TreeNode *)root;

@end

.m文件

#import "TreeNode.h"


@implementation TreeNode

- (void)dealloc

{

    [_name release];

    [_subnodes release];

    

    [super dealloc];

}


- (id)initWithName:(NSString *)name

{

    self = [super init];

    if (self) {

        [self setName:name];

        [self setSubnodes:[NSMutableArrayarray]];

    }

    return self;

}

+ (id)treeNodeWithName:(NSString *)name

{

    TreeNode *node = [[TreeNodealloc]initWithName:name];

    return [node autorelease];

}


- (TreeNode *)getSubnodeWithName:(NSString *)name

{

    TreeNode *node = nil;

    for (TreeNode *tnin [self subnodes]) {

        if ([[tn name]isEqualToString:name]) {

            node = tn;

            break;

        }

    }

    return node;

}

- (TreeNode *)getAnyNodeWithName:(NSString *)name

{

    TreeNode *node = nil;

    if ([[self name] isEqualToString:name]) {

        node = self;

    } else {

        for (TreeNode *snodein self.subnodes) {

            node = [snode getAnyNodeWithName:name];

            if (node != nil) {

                break;

            }

        }

    }

    return node;

}

//树形结构的遍历就是递归

+ (void)traverseAllNode:(TreeNode *)root

{

    NSLog(@"%@", [rootname]);

    for (TreeNode *nodein [root subnodes]) {

        //类方法中self代表类对象

        [self traverseAllNode:node];

        [TreeNode traverseAllNode:node];

    }

}

.m文件

#import <Foundation/Foundation.h>

#import "TreeNode.h"

int main(int argc, const char * argv[]) {

    

    NSString *filePath =@"/Users/dlios/Desktop/666666/20150302/20150302/area.txt";

    NSString *buffer = [NSStringstringWithContentsOfFile:filePath encoding:NSUTF8StringEncodingerror:nil];

    NSArray *array = [buffercomponentsSeparatedByString:@"\n"];

    NSCharacterSet *cSet = [NSCharacterSetcharacterSetWithCharactersInString:@" 0123456789"];

    

    TreeNode *root = [TreeNodetreeNodeWithName:@"root"];

    

    

    

    //创建子节点

    //找到父节点

    for (NSString *sin array) {

        if (! [s hasPrefix:@" "]) {

            NSString *provinceName = [s stringByTrimmingCharactersInSet:cSet];

            TreeNode *pNode = [TreeNodetreeNodeWithName:provinceName];

            [root.subnodes addObject:pNode];

            

            

        }

        if ([s hasPrefix:@"  "] && ! [shasPrefix:@"   "]) {

            TreeNode *pNode = [root.subnodeslastObject];

            NSString *cityName = [s stringByTrimmingCharactersInSet:cSet];

            TreeNode *cNode = [TreeNodetreeNodeWithName:cityName];

            [pNode.subnodes addObject:cNode];

            

            

        }

        if ([s hasPrefix:@"    "]) {

            TreeNode *pNode = [root.subnodeslastObject];

            TreeNode *cNode = [pNode.subnodeslastObject];

            

            NSString *districtName = [s stringByTrimmingCharactersInSet:cSet];

            TreeNode *dNode = [TreeNodetreeNodeWithName:districtName];

            [cNode.subnodes addObject:dNode];

        }

    }

    

    

    for (TreeNode *pNodein [root subnodes]) {

        if ([[pNode name]isEqualToString:@"黑龙江"]) {

            for (TreeNode *cNodein [pNode subnodes]) {

                if ([[cNode name] isEqualToString:@"齐齐哈尔市"]) {

                    for (TreeNode *dNodein [cNode subnodes]) {

                        NSLog(@"%@", [dNodename]);

                    }

                }

            }

        }

    }

    return 0;

}


输出部分

2015-03-02 10:09:45.782 20150302[1500:303] 龙沙区

2015-03-02 10:09:45.802 20150302[1500:303] 建华区

2015-03-02 10:09:45.802 20150302[1500:303] 铁锋区

2015-03-02 10:09:45.803 20150302[1500:303] 昂昂溪区

2015-03-02 10:09:45.803 20150302[1500:303] 富拉尔基区

2015-03-02 10:09:45.804 20150302[1500:303] 碾子山区

2015-03-02 10:09:45.804 20150302[1500:303] 梅里斯区

2015-03-02 10:09:45.805 20150302[1500:303] 讷河市

2015-03-02 10:09:45.805 20150302[1500:303] 龙江县

2015-03-02 10:09:45.806 20150302[1500:303] 依安县

2015-03-02 10:09:45.806 20150302[1500:303] 泰来县

2015-03-02 10:09:45.806 20150302[1500:303] 甘南县

2015-03-02 10:09:45.807 20150302[1500:303] 富裕县

2015-03-02 10:09:45.807 20150302[1500:303] 克山县

2015-03-02 10:09:45.808 20150302[1500:303] 克东县

2015-03-02 10:09:45.808 20150302[1500:303] 拜泉县

Program ended with exit code: 0



0 0
原创粉丝点击