gpt4 book ai didi

ios - 哈希表代码解释

转载 作者:行者123 更新时间:2023-11-28 22:07:02 26 4
gpt4 key购买 nike

我找到了这个用 objective-c 编写的哈希表的实现。我几乎可以理解所有内容,但我很难理解 -(id) init 函数究竟是如何工作的。这是 HashTable.m 文件中的方法,有 3 行(我在问题后立即在下面重新粘贴)。有人可以解释它到底在做什么吗?我包括了一些其他相关代码,尽管在大多数情况下我认为我可以遵循其余代码。尽管如此,我不清楚 init 方法的细节。谢谢

-(id)init
{
self =[super init];
self.othercontainer = [[NSMutableArray alloc]init];
return self;

哈希表.h

#import <Foundation/Foundation.h>

@interface HashTable : NSObject

@property(nonatomic) NSMutableArray* othercontainer;

-(id)objectForKey:(NSString*)name;
-(void)setObject:(id)object forKey:(NSString*)name;
-(id)init;


@end

哈希表.m

#import "HashTable.h"
#import "Person.h"

@implementation HashTable

-(id)init
{
self =[super init];
self.othercontainer = [[NSMutableArray alloc]init];
return self;
}

-(id)objectForKey:(NSString*)name
{
Person* tempPerson = nil;
for (id item in self.othercontainer)
{
NSString* tempName = [((Person*)item) name];
if ([tempName isEqualToString:name])
{
tempPerson = item;
break;
}

}


return tempPerson;
}

-(void)setObject:(id)object forKey:(NSString*)name
{
[self.othercontainer addObject:object];
}

@end

ViewController.m的一部分

NSData *data;
NSFileHandle *fh;
NSString *inBoundFile = @"/Users/user/Desktop/names.txt";
NSString *fileString;

fh = [NSFileHandle fileHandleForReadingAtPath:inBoundFile];

data = [fh readDataToEndOfFile];
fileString = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

NSArray *PersonArray = [fileString componentsSeparatedByString:@"\n"];

self.container = [[HashTable alloc]init];
for (int x= 0; PersonArray.count > x ;x++) {
NSArray* tempNameandAddress = [PersonArray[x] componentsSeparatedByString:@" "];
Person *personA = [[Person alloc]init]; //could be other ways of defining an instance of an object
personA.name = tempNameandAddress[0];
personA.address = tempNameandAddress[1];
if ([self.container objectForKey:personA.name] == nil)
[self.container setObject:personA forKey:personA.name];
else
NSLog(@"%@ already exists \n",personA.name);
}

最佳答案

这简直就是一个几乎正确的通用初始化。self 设置为父类(super class) init 返回的对象。然后他们错过了一个正确的步骤。下一步应该是 if (self) { ...additional setup... }如果从 super init 返回的 self 不是 nil,基本上只创建 ivars/properties。如果此时 self 为 nil,您通常会绕过其他代码并直接返回 self。 (返回零)

下一行只是为 othercontainer 属性创建 NSMutableArray ivar。

这也不对。在 init 中,这是你应该直接使用合成的 ivar 的时候。_othercontainer = [[NSMutableArray alloc] init];

这里没有什么特别的。

关于ios - 哈希表代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com