HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – NSSet迭代比NSMutableArray迭代消耗更多时间,NSArray迭代比NSMutableArray迭代消耗更多时间大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
即使我遍历以下 NSSet,NSMutableArray,NSFastEnumeration文档,我也找不到下面提到的方案的令人满意的来源:

这里,NSMutableArray,NSArray和NSSet包含相同的10000000个对象.

for (NSString *Strin in MutableArray) //NSMutableArray
{
    // same Implementation
}
NSLog(@"Time for Mutable Array  %d Iteration : %f",ObjectCount,[[NSDate date]timeIntervalSinceDate:startDate]);
startDate = [NSDate date];
for (NSString *Strin in array)  //NSArray
{
    // same Implementation
}
NSLog(@"Time for  NSArray  %d Iteration : %f",[[NSDate date]timeIntervalSinceDate:startDate]);
startDate = [NSDate date];
for (NSString *Strin in Set) //NSSet
{
    // same Implementation
}
NSLog(@"Time for Set  %d Iteration : %f",[[NSDate date]timeIntervalSinceDate:startDate]);

输出如下:

NSMutableArray 10000000迭代的时间:0.048785

NSArray 10000000迭代的时间:0.390537

NSSet 10000000迭代的时间:4.684203

为什么NSSet和NSArray迭代时间之间存在如此巨大的差异.

请仔细阅读您的答案.

编辑:
我找到了上面迭代时间背后的实际原因,因为数组和Set中的计数不等.我已经发布了实际的问题here.此外,我可以在这里发布相同的内容,但这个页面似乎太无证了,而且原因背后的原因也有偏差.再次感谢大家的回应.

解决方法

我不同意你的结果:

#import <Foundation/Foundation.h>

#define COLLECTION_SIZE 10000000

static NSString *randomString() {
    unichar buffer[18];
    NSUInteger size = (arc4random() % 12) + 6;
    for (NSUInteger i = 0; i < size; i++) {
        buffer[i] = (arc4random() % 93) + '!';
    }
    return [[NSString alloc] initWithCharacters:buffer length:size];
}

static NSSet *createCollection(NSUInteger sizE) {
    NSMutableSet *collection = [[NSMutableSet alloc] init];
    for (NSUInteger i = 0; i < size; i++) {
        for (;;) {
            NSString *s = randomString();
            if (![collection member:s]) {
                [collection addObject:s];
                break;
            }
        }
    }
    return collection;
}

static NSTimeInterval timedIter(id<NSFastEnumeration> collection) {
    NSUInteger totALLENgth = 0;
    NSDate *startDate = [NSDate date];
    for (NSString *s in collection) {
        totALLENgth += [s length];
    }
    return [[NSDate date] timeIntervalSinceDate:startDate];
}

int main(int argc,const char **argv) {
    @autoreleasepool {
        NSSet *set = createCollection(COLLECTION_SIZE);
        NSArray *array = [set allObjects];
        NSMutableArray *mutArray = [[set allObjects] mutableCopy];

        NSLog(@"set iteration=%f",timedIter(set));
        NSLog(@"array iteration=%f",timedIter(array));
        NSLog(@"mutArray iteration=%f",timedIter(mutArray));
    }
    return 0;
}

$clang -o itertime itertime.m -fobjc-arc -framework Foundation
$./itertime
2013-11-13 11:23:13.344 itertime[77576:707] set iteration=0.422592
2013-11-13 11:23:13.654 itertime[77576:707] array iteration=0.309387
2013-11-13 11:23:13.964 itertime[77576:707] mutArray iteration=0.309107

大佬总结

以上是大佬教程为你收集整理的ios – NSSet迭代比NSMutableArray迭代消耗更多时间,NSArray迭代比NSMutableArray迭代消耗更多时间全部内容,希望文章能够帮你解决ios – NSSet迭代比NSMutableArray迭代消耗更多时间,NSArray迭代比NSMutableArray迭代消耗更多时间所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。