我想知道是否可以根据其中包含的数值对NSStrings的NSArray进行排序。基本上它是进程ID和进程名称的列表,我想根据进程ID对进程进行排序。该数组如下所示:
"286 Google Chrome He",
"1209 ibtool",
"0 kernel_task",
"1 launchd",
"10 kextd",
"11 notifyd",
"12 diskarbitrationd",
"13 configd",
"14 syslogd",
"15 DirectoryService",
"16 distnoted",
"18 ntpd",
"22 SystemStarter",
"25 securityd",
"28 mds",
"29 mDNSResponder",
"30 loginwindow",
"31 KernelEventAgent",
"33 hidd",
"34 fseventsd",
"36 dynamic_pager",
"42 blued",
"43 autofsd",
"46 WDSmartWareD",
"47 WDDMService",
"61 coreservicesd",
"62 WindowServer",
"71 HWPortCfg",
"72 HWNetCfg",
"159 socketfilterfw",
"165 cvmsServ",
"177 coreaudiod",
"191 vmnet-bridge",
"196 vmnet-dhcpd",
"198 vmnet-netifup",
"200 vmnet-dhcpd",
"204 vmnet-natd",
"206 vmnet-netifup",
"220 launchd",
"224 Dock",
"225 SystemUIServer",
"226 Finder",
"228 pboard",
"229 fontd",
"240 UserEventAgent",
"247 AirPort Base Sta",
"252 iprint-listener",
"253 StatusMenu",
"254 Dropbox",
"271 dbfseventsd",
"275 Google Chrome",
"295 Google Chrome He",
"298 AppleSpell",
"634 Google Chrome He",
"696 Google Chrome He",
"730 Microsoft Word",
"733 Microsoft Databa",
"736 Microsoft AU Dae",
"1095 usbmuxd",
"1110 Xcode",
"1171 Interface Builde",
"1282 Interface Builde",
"1283 Interface Builde",
"1475 Google Chrome He",
"1531 Google Chrome He",
"1533 Google Chrome He",
"1681 Google Chrome He",
"1682 Google Chrome He",
"1686 Google Chrome He",
"1687 Google Chrome He",
"1692 Google Chrome He",
"1945 Google Chrome He",
"2088 Keynote",
"2268 Google Chrome He",
"2326 Google Chrome He",
"2481 Google Chrome He",
"2545 Google Chrome He",
"2596 Google Chrome He",
"2766 mdworker",
"2933 Google Chrome He",
"2963 iPhone Simulator",
"2967 SimulatorBridge",
"2970 lsd",
"2971 SpringBoard",
"2982 ocspd",
"2998 installd",
"3000 TableViewControl",
"3001 taskgated",
"3002 gdb-i386-apple-d"
非常感谢任何帮助!
答案 0 :(得分:7)
对于您的情况,最简单的方法是使用排序描述符:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"integerValue" ascending:YES];
NSArray *sortedArray = [originalArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
答案 1 :(得分:5)
是的,您可以使用以下NSArray实例方法:
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
您需要定义一个带有三个参数的int函数:两个要比较的数组元素和一个上下文。它返回NSComparisonResult(-1,0或1)。例如:
NSInteger firstWordIntCompare(id stringLeft, id stringRight, void *context)
{
// Extract number from stringLeft and stringRight
NSArray *wordsLeft = [stringLeft componentsSeparatedByString:@" "];
NSArray *wordsRight = [stringRight componentsSeparatedByString:@" "];
NSString *firstWordLeft = wordsLeft.count ? [wordsLeft objectAtIndex:0] : nil;
NSString *firstWordRight = wordsRight.count ? [wordsRight objectAtIndex:0] : nil;
int intLeft = [firstWordLeft intValue];
int intRight = [firstWordRight intValue];
if (intLeft < intRight)
return NSOrderedAscending;
else if (intLeft > intRight)
return NSOrderedDescending;
else
return NSOrderedSame;
}
然后通过使用函数调用NSArray方法返回已排序的数组:
NSArray *sortedArray = [origArray sortedArrayUsingFunction:firstWordIntCompare context:NULL];