728x90
// 방법 1
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"value1", @"key1", @"value2", @"key2", nil];
// 방법 2
NSDictionary *dictionary = @{@"key", @"value"};
dictionary 배열에서 원하는 key의 value 개수 필터링
list : [
{
"age" : 3,
"grade" : "A"
},
{
"age" : 32,
"grade" : "B"
},
{
"age" : 14,
"grade" : "C"
},
{
"age" : 6,
"grade" : "A"
}
]
위와 같은 형식의 배열이라고 해보자,
grade별 value counting하여 원하는 결과는 다음과 같다.
{ "A" : 2,
"B" : 1,
"C" : 1
}
==>
먼저 list의 첫번째 값을 딕셔너리에 넣고,
NSMutableDictionary * filterDic = [NSMutableDictionary new];
[filterDic setObject:@1 forKey:[[list objectAtIndex:0] objectForKey:@"grade"]];
list를 순회하면서 이미 있는 key인지 아닌지 확인하여 딕셔너리를 업데이트 해준다.
for (int i = 1; i < [list count]; i++) {
NSString * grade = [[list objectAtIndex:i] objectForKey:@"grade"];
if ([filterDic objectForKey:grade] == nil) {
[filterDic setObject:@1 forKey:grade];
} else {
[filterDic setObject:@([[filterDic objectForKey:grade] intValue] + 1) forKey:grade];
}
}
NSArray * arr = [{grade:a,time:1},
{grade:b,time:1},
{grade:a,time:2},
{grade:a,time:3}
];
이런, 딕셔너리를 갖는 배열을 공통되는 값들로 필터링된 배열로 바꾸고 싶을때,
아래와 같은 형식으로 만들고 싶을 때
[{
grade = a
info = [{time:1},
{time:2},
{time:3}
]
},
{
grade = b
info = [{time:1}
]
}
]
NSMutableArray * myArr = [NSMutableArray new];
for (int i = 0; i < [dataArr count]; i++) {
NSMutableArray * timeArr = [NSMutableArray new];
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"(grade contains[c] %@)", [[dataArr objectAtIndex:i] objectForKey:@"grade"]];
NSArray * predicateResult = [myArr filteredArrayUsingPredicate:predicate];
if ([predicateResult count] == 0) {
[timeArr addObject:[dataArr objectAtIndex:i]];
for (int j = i+1; j < [dataArr count]; j++) {
NSString * iKey = [[dataArr objectAtIndex:i] objectForKey:@"grade"];
NSString * jKey = [[dataArr objectAtIndex:j] objectForKey:@"grade"];
if ([iKey isEqualToString: jKey]) {
[timeArr addObject:[dataArr objectAtIndex:j]];
}
}
NSString * key = [[dataArr objectAtIndex:i] objectForKey:@"grade"];
NSDictionary * dic = @{@"grade":key, @"time":timeArr};
[myArr addObject:dic];
}
}
728x90
'iOS > Objective-C' 카테고리의 다른 글
NSArray (0) | 2022.11.02 |
---|---|
NSMutableArray (0) | 2022.11.02 |
NSString (0) | 2022.10.27 |
UIButton (0) | 2022.09.28 |
NotificationCenter(Observer) (0) | 2022.06.10 |
댓글