আপনি যদি কেবল একটি অ্যারে বাছাই করেন তবে আপনি NSNumbers
তাদের 1 টি কল দিয়ে বাছাই করতে পারেন:
[arrayToSort sortUsingSelector: @selector(compare:)];
এটি কাজ করে কারণ অ্যারেতে থাকা NSNumber
বস্তুগুলি ( বস্তুগুলি) তুলনা পদ্ধতিটি প্রয়োগ করে। আপনি NSString
অবজেক্টগুলির জন্য , এমনকি এমন কোনও কাস্টম ডেটা অবজেক্টগুলির একটি অ্যারেও করতে পারেন যা তুলনামূলক পদ্ধতিটি প্রয়োগ করে।
তুলনামূলক ব্লক ব্যবহার করে এখানে কয়েকটি উদাহরণ কোড দেওয়া হয়েছে। এটি অভিধানের একটি অ্যারে বাছাই করে যেখানে প্রতিটি অভিধানে একটি কী "সাজানো_কি" তে একটি সংখ্যা অন্তর্ভুক্ত করে।
#define SORT_KEY @\"sort_key\"
[anArray sortUsingComparator:
^(id obj1, id obj2)
{
NSInteger value1 = [[obj1 objectForKey: SORT_KEY] intValue];
NSInteger value2 = [[obj2 objectForKey: SORT_KEY] intValue];
if (value1 > value2)
{
return (NSComparisonResult)NSOrderedDescending;
}
if (value1 < value2)
{
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
উপরের কোডটি প্রতিটি সাজানোর কীটির জন্য একটি পূর্ণসংখ্যার মান পাওয়ার এবং এটি কীভাবে করা যায় তার উদাহরণ হিসাবে তাদের তুলনা করার কাজ করে। যেহেতু NSNumber
বস্তুগুলি একটি তুলনামূলক পদ্ধতি কার্যকর করে, তাই এটি আরও অনেক সহজভাবে আবারও লেখা যেতে পারে:
#define SORT_KEY @\"sort_key\"
[anArray sortUsingComparator:
^(id obj1, id obj2)
{
NSNumber* key1 = [obj1 objectForKey: SORT_KEY];
NSNumber* key2 = [obj2 objectForKey: SORT_KEY];
return [key1 compare: key2];
}];
বা তুলনাকারীর বডিটি এমনকি 1 লাইন পর্যন্ত নিঃসৃত করা যেতে পারে:
return [[obj1 objectForKey: SORT_KEY] compare: [obj2 objectForKey: SORT_KEY]];
আমি সাধারণ বিবৃতি এবং প্রচুর অস্থায়ী ভেরিয়েবলগুলিকে পছন্দ করি কারণ কোডটি পড়া সহজ, এবং ডিবাগ করা সহজ। সংকলক অস্থায়ী ভেরিয়েবলগুলি যেভাবেই হোক অপসারণ করে তাই সর্ব-এক-লাইন সংস্করণের কোনও সুবিধা নেই version