【发布时间】:2018-09-07 04:30:44
【问题描述】:
目前,我混合了不同货币的对象:
NSArray *currencies = @[ @"USD",@"USD",@"USD",@"USD", @"EUR",@"EUR",@"EUR",@"EUR", @"PHP",@"PHP",@"PHP",@"PHP", @"AUD",@"AUD",@"AUD",@"AUD"];
我的代码将这些对象分成各自不同的数组,结果将是:
USD[] = [USD , USD , USD ,USD]
PHP[] = [PHP , PHP , PHP]
EUR[] = [EUR , EUR , EUR]
AUD[] = [AUD, AUD , AUD].
问题是我只想将美元和 PHP 分开,而其他货币应该放在一个数组中。像这样:
USD[] = [USD , USD , USD ,USD]
PHP[] = [PHP , PHP , PHP]
OTHER[] = [EUR,EUR,EUR,EUR,AUD,AUD,AUD]
我当前的代码是这样的:
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSArray *currencies = @[ @"USD", @"EUR", @"PHP", @"AUD" ];
NSMutableArray<AccountBalance *> *allAccounts = [NSMutableArray new];
int numOdDummyAccounts = 100;
for (int i=0;i<numOdDummyAccounts;i++) {
int currencyIdx = rand() % [currencies count];
AccountBalance *dummyBalance = [AccountBalance new];
[dummyBalance setCurrency:currencies[currencyIdx]];
[allAccounts addObject:dummyBalance];
}
// print out all currencies
for (int i=0;i<numOdDummyAccounts;i++) {
NSLog(@"%@", [allAccounts[i] getCurrency]);
}
////////////////////////////////////////////////////////////////
// now do the sorting
NSMutableDictionary<NSString *, NSMutableArray *> *groupedResult = [NSMutableDictionary new];
[allAccounts enumerateObjectsUsingBlock:^(AccountBalance * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSMutableArray *currencyArray = [groupedResult objectForKey:[obj getCurrency]];
if (currencyArray) {
[currencyArray addObject:obj];
} else {
NSMutableArray *newCurrencyArray = [NSMutableArray new];
[newCurrencyArray addObject:obj];
[groupedResult setObject:newCurrencyArray forKey:[obj getCurrency]];
}
}];
// print out all grouped currencies
NSMutableArray<NSMutableArray *> *arrayOfArrays = [NSMutableArray new];
for (NSString *currency in groupedResult.allKeys) {
NSMutableArray *currentCurrency = [groupedResult objectForKey:currency];
[arrayOfArrays addObject:currentCurrency];
NSLog(@"Accounts with currency %@: ", currency);
// print out all accounts with this currency
for (int i=0;i<[currentCurrency count];i++) {
NSLog(@"%@", [currentCurrency[i] getCurrency]);
}
}
}
return 0;
}
【问题讨论】:
-
你的方法没有必要复杂。有一个简单的解决方案,用户 NSPredicate 在您的数组上应用过滤器。 stackoverflow.com/questions/12084318/…
-
只是想知道您为什么不使用谓词?使用 5 line 的代码而不是 20 多行代码有问题吗?
标签: ios objective-c sorting