[英]How to sort an array of NSStrings by the number contained within? (in ascending order)
我想知道是否可以根據其中包含的數值對 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"
很感謝任何形式的幫助!
對於您的情況,最簡單的方法是使用排序描述符:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"integerValue" ascending:YES];
NSArray *sortedArray = [originalArray sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
是的,您可以使用以下 NSArray 實例方法:
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
您需要定義一個 int function,它需要三個 arguments:兩個要比較的數組元素和一個上下文。 它返回一個 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;
}
然后通過使用 function 調用 NSArray 方法返回排序后的數組:
NSArray *sortedArray = [origArray sortedArrayUsingFunction:firstWordIntCompare context:NULL];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.