iOS_字典數組 按key分組和排序,ioskey
//// main.m// SortGroup//// Created by beyond on 14-10-26.// Copyright (c) 2014年 beyond.com All rights reserved.// 按GroupTag分組和 按Order欄位排序 enabled表示不啟用#import <Foundation/Foundation.h>int main(int argc, const char * argv[]) { @autoreleasepool { // 1.定義一個測試的字典數組 NSMutableArray *dictArray = @[ @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:0], @"FOrder" : [NSNumber numberWithInt:0], @"FName" : @"寶玉" }, @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:1], @"FOrder" : [NSNumber numberWithInt:0], @"FName" : @"黛玉" }, @{ @"FEnabled" : [NSNumber numberWithInt:0], @"FGroupTag" : [NSNumber numberWithInt:1], @"FOrder" : [NSNumber numberWithInt:1], @"FName" : @"寶釵" }, @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:1], @"FOrder" : [NSNumber numberWithInt:2], @"FName" : @"湘雲" }, @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:2], @"FOrder" : [NSNumber numberWithInt:0], @"FName" : @"妙玉" }, @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:3], @"FOrder" : [NSNumber numberWithInt:0], @"FName" : @"晴雯" }, @{ @"FEnabled" : [NSNumber numberWithInt:1], @"FGroupTag" : [NSNumber numberWithInt:3], @"FOrder" : [NSNumber numberWithInt:1], @"FName" : @"襲人" } ]; // NSArray 轉成 NSMutableArray // 0、對於不啟用的,即enabled為0的字典模型,刪除掉 NSMutableArray *dictArr = [NSMutableArray array]; for (int i = 0; i < dictArray.count; i++) { NSDictionary *dict = dictArray[i]; if ([[dict objectForKey:@"FEnabled"]intValue] == 1) { [dictArr addObject:dict]; } } // NSLog(@"清除未啟用的字典後的數組:%@",dictArr); // 1、對數組按GroupTag排序 NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FGroupTag" ascending:YES]]; NSArray *sortedArr = [dictArr sortedArrayUsingDescriptors:sortDesc]; // NSLog(@"排序後的數組:%@",sortedArr); // 2、對數組進行分組,按GroupTag // 遍曆,建立組數組,組數組中的每一個元素是一個模型數組 NSMutableArray *_groupArr = [NSMutableArray array]; NSMutableArray *currentArr = [NSMutableArray array]; NSLog(@"class--%@",[currentArr class]); // 因為肯定有一個字典返回,先添加一個 [currentArr addObject:sortedArr[0]]; [_groupArr addObject:currentArr]; // 如果不止一個,才要動畫添加 if(sortedArr.count > 1){ for (int i = 1; i < sortedArr.count; i++) { // 先取出組數組中 上一個模型數組的第一個字典模型的groupID NSMutableArray *preModelArr = [_groupArr objectAtIndex:_groupArr.count-1]; int preGroupID = [[[preModelArr objectAtIndex:0] objectForKey:@"FGroupTag"] intValue]; // 取出當前字典,根據groupID比較,如果相同則添加到同一個模型數組;如果不相同,說明不是同一個組的 NSDictionary *currentDict = sortedArr[i]; int groupID = [[currentDict objectForKey:@"FGroupTag"] intValue]; if (groupID == preGroupID) { [currentArr addObject:currentDict]; }else{ // 如果不相同,說明 有新的一組,那麼建立一個模型數組,並添加到組數組_groupArr currentArr = [NSMutableArray array]; [currentArr addObject:currentDict]; [_groupArr addObject:currentArr]; } } } // 3、遍曆 對每一組 進行排序 NSMutableArray *tempGroupArr = [NSMutableArray array]; for (NSMutableArray *arr in _groupArr) { NSArray *sortDesc = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"FOrder" ascending:YES]]; NSMutableArray *tempArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { if([[obj1 objectForKey:@"FOrder"]intValue] < [[obj2 objectForKey:@"FOrder"]intValue]){ return NSOrderedAscending; } if([[obj1 objectForKey:@"FOrder"]intValue] > [[obj2 objectForKey:@"FOrder"]intValue]){ return NSOrderedDescending; } return NSOrderedSame; }]; [tempGroupArr addObject:tempArr]; } _groupArr = tempGroupArr; NSLog(@"封裝好的group數組:%@",_groupArr); } return 0;}
VC++二維數組字典順序排序
把scanf("%s,",name[i]);改為gets(name[i]);就可以了。
因為scanf輸入字串時,遇到空格會認為字串結束,從而導致空格後面的字元輸入到下一個name中了;
gets()僅僅在斷行符號後才認為一個字串輸入結束。
編寫程式輸入若干個同學的姓名,使用指標數組指向這組字串,對這組字串按字典順序排序並輸出
希望對你有協助。
#include <iostream>#include <string.h>using namespace std;const int SIZE=256;char *pName[SIZE];int main(){ int i=0,n=5; while(i<n) { char tmp[32]={0}; cin >> tmp; pName[i] = new char[strlen(tmp)+1]; strcpy(pName[i],tmp); pName[i][strlen(tmp)] = '\0'; i++; } char *p = NULL; for(int p1=0;p1<n;p1++) { for(int pos=n-1;pos>p1;pos--) { if(strcmp(pName[pos-1],pName[pos])>0) { p= pName[pos]; pName[pos] = pName[pos-1]; pName[pos-1] = p; } } } for(int p1=0;p1<n;p1++) { cout << pName[p1] << endl; }}