ব্লক পদ্ধতির প্রতিটি কী জন্য লুকিং অ্যালগরিদম চালানো এড়ানো হয় :
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL* stop) {
NSLog(@"%@ => %@", key, value);
}];
যদিও NSDictionary
হিসেবে বাস্তবায়িত হয় hashtable (যার মানে হল একটি উপাদান আপ খুঁজছেন খরচ O(1)
), লুক-এখনও তোমাদের পুনরাবৃত্তির দ্বারা মন্থর একটি ধ্রুবক ফ্যাক্টর ।
আমার পরিমাপগুলি দেখায় যে d
সংখ্যার অভিধানের জন্য ...
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
for (int i = 0; i < 5000000; ++i) {
NSNumber* value = @(i);
dict[value.stringValue] = value;
}
... ব্লক পদ্ধতির সাথে সংখ্যার যোগফল ...
__block int sum = 0;
[dict enumerateKeysAndObjectsUsingBlock:^(NSString* key, NSNumber* value, BOOL* stop) {
sum += value.intValue;
}];
... লুপ পদ্ধতির চেয়ে ...
int sum = 0;
for (NSString* key in dict)
sum += [dict[key] intValue];
... প্রায় 40% দ্রুত ।
সম্পাদনা : নতুন এসডিকে (6.1+) লুপ পুনরাবৃত্তিকে অনুকূল করে তুলবে বলে মনে হচ্ছে, তাই উপরের সরল মামলার জন্য লুপ পদ্ধতির ব্লক পদ্ধতির চেয়ে এখন প্রায় 20% দ্রুত is
Swift
: সিনট্যাক্স, এই পোস্টে পড়ুন stackoverflow.com/a/24111700/419348