Sha256: 1b9d6fb49164faf22c2793ae09db76f91ed2f9fced7caeac4472db3678f55206

Contents?: true

Size: 1.76 KB

Versions: 396

Compression:

Stored size: 1.76 KB

Contents

#import <Foundation/Foundation.h>
#import "GradeSchoolExample.h"

@implementation GradeSchool

- (instancetype)init {
    self = [super init];
    
    if (self) {
        self.db = [NSMutableDictionary dictionary];
    }
    
    return self;
}

- (void)addStudentWithName:(NSString *)name andGrade:(NSNumber *)grade {
    NSMutableArray *studentsInGrade = [self studentsInGrade:grade];
    [studentsInGrade addObject:name];
}

- (NSMutableArray *)studentsInGrade:(NSNumber *)grade {
    
    NSMutableArray *studentsInGrade = [[self db] objectForKey:grade];
    
    if (!studentsInGrade) {
        studentsInGrade = [NSMutableArray array];
        self.db[grade] = studentsInGrade;
    }
    
    return studentsInGrade;
}

- (NSDictionary *)sort {
    NSMutableDictionary *sortedDB = [NSMutableDictionary dictionary];
    
    [[self allGradesOrdered] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        sortedDB[obj] = [self studentsInGradeOrdered:obj];
    }];
    
    return sortedDB;
}


- (NSArray *)studentsInGradeOrdered:(NSNumber *)grade {
    return [[self studentsInGrade:grade] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        if ([obj1 isEqualToString:obj2]) {
            return NSOrderedSame;
        } else if (obj1 < obj2) {
            return NSOrderedDescending;
        }
        return NSOrderedAscending;
        
    }];
}

- (NSArray *)allGrades {
    return [[self db] allKeys];
}

- (NSArray *)allGradesOrdered {
    return [[self allGrades] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        if ([obj1 isEqualToValue:obj2]) {
            return NSOrderedSame;
        } else if (obj1 < obj2) {
            return NSOrderedDescending;
        }
        return NSOrderedAscending;
        
    }];
}

@end

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.179 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.178 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.177 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.176 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.175 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.174 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.173 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.172 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.171 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.170 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.169 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.167 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.166 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.165 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.164 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.163 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.162 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.161 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m
trackler-2.2.1.160 tracks/objective-c/exercises/grade-school/GradeSchoolExample.m