繁体   English   中英

字典与“ if”和“ return”的组合

[英]Dictionary vs Bunch of “if” with “return”

我对一种iOS应用程序中使用的两种方法感到困惑。 可以说我可以创建一个字典:

NSDictionary *numberDict = @{
    @"First" : [NSNumber numberWithInt:1],
    @"Second" : [NSNumber numberWithInt:2]};

稍后的,

NSNumber *n = [numberDict objectForKey:@"First"]);

或只写一个返回数字的方法:

-(NSNumber *) numberMethod: (NSString *)number{
if([number isEqualToString @"First"]) return [NSNumber numberWithInt:1];
if([number isEqualToString @"Second"]) return [NSNumber numberWithInt 2];
}

然后,

NSNumber *n = [self numberMethod: @"First"];

在我的示例中,更推荐哪种方式(优势与劣势),哪一种成员比另外两个成员表现出更好的性能?

访问字典的元素应该是O(1)操作。 另一方面,对于同一操作, if条件花费相当多的时间。 因此,考虑到代码的速度和简洁性, NSDictionary更好。 另一个优点是,您可以根据需要将任意数量的元素添加到字典中,因此它更具动态性(例如在运行时将元素加载到字典中的情况下,例如Web服务响应)。 这将使代码更加灵活。

另一方面,考虑到内存, NSDictionary对象显然比该方法占用更多的内存,这是我看到的唯一优点。

如果您问我该怎么办,我当然会选择NSDictionary

这取决于您要实现的目标。 但是在您提到的情况下,您似乎想拥有键/值对,在这种情况下,我将使用该语言提供的内容-字典。 NSDictionary具有O(1)查找时间,并且已针对您要执行的操作进行了优化,请记住您可以使用Objective-C 2.0方法创建字典:

NSDictionary *numberDict = @{@"First" : @1, @"Second" : @2 };

以及访问值:

numberDict[@"First"]; // returns @1

我认为:

NSDictionarymethod需要更多的内存。 因为字典已存储。 如果有太多大物体,那不是很好。

NSDictionary运行速度快于method 因为它已经被加载并使用井号来访问值。

我将参考NSDictionary方法,因为它更简单。

建议使用NSDictionary / NSMutableDictionary

NSDictionary *numberDict = @{
    @"First" : @1,
    @"Second": @2
};

NSNumber *n = numberDict[@"First"];
  • 如果为此使用方法,那么最终将编写大量的if语句,并且每次要添加新值时,都必须再次编写整个if语句。 如上所示, NSDictionary速记符号非常简洁。
  • 在调用方法时,必须指定类对象即self并且必须编写长方法名。 而从NSDictionary访问值时,您可以利用下标表示法。
  • 您可以列举一个NSDictionary
  • 您可以利用为NSDicationary编写的其他方法,例如allKeysallValueswriteToFileinitFromFilecountinitWithDictionary ,然后列表继续进行。
  • 最后,如果您使用的是NSMutableDictionary则可以在以后的代码中修改值。

方法的唯一优点是它们不会占用任何内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM