辞書の値をもとにソートする
キーをもとにソートする記事はけっこうありましたが、値でソートするものが見当たらなかったのでポストです。
間違ってるというか力技な気がしてならないですが・・・
辞書のデータ:
・キー:Number・値:1とキー:Name・値:Aのセット
・キー:Number・値:3とキー:Name・値:Bのセット
・キー:Number・値:2とキー:Name・値:Cのセット
・キー:Number・値:5とキー:Name・値:Dのセット
をNumberキーの値が大きい順に並び替えて、いちばん大きい値のNameの値を取り出します(ヤヤコシイ
上記の場合だと、D=5でDがいちばん大きいので、Dになります。
ついでにDがいちばん大きかったかそうでなかったかの判定をしています。
NSArray *namaArray=[NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:1],@"Number",@"A",@"Name",nil],[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:3],@"Number",@"B",@"Name", nil] ,[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:2],@"Number",@"C",@"Name", nil] ,[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:5],@"Number",@"D",@"Name", nil],nil]; //数値が大きい順にソート NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"Number" ascending:NO]; //ソートして出来た配列 NSArray * sortedArray = [namaArray sortedArrayUsingDescriptors: [NSArray arrayWithObject:descriptor]]; //文字列に NSString *str = [sortedArray componentsJoinedByString:@","]; //Name = ?のところだけ取り出す NSString *str2 = [str substringWithRange:NSMakeRange(5,10)]; NSLog(@"%@",str2); //取り出した文字列=いちばん大きい値を持つセットのNameの値がDかどうか NSRange searchResult = [str2 rangeOfString:@"D"]; if(searchResult.location == NSNotFound){ NSLog(@"ない・・・"); }else{ // みつかった場合の処理 NSLog(@"あったよ"); } }