Swift:基于第二数组计算TableView分区金额总额的实现方法
计算NSFetchedResultsController分区金额总额的实现方案
当然可以用enumerateObjectsUsingBlock:来搞定这个需求!这是个很典型的分段求和场景,结合你手里的金额数组和分区元素数量数组,我们可以通过跟踪当前遍历位置的方式,轻松算出每个分区的总额。
具体实现代码(Objective-C)
// 你的原始金额数组 NSArray *amountArray = @[@50.0, @1000.0, @100.0, @50.0]; // 每个分区的元素数量数组 NSArray *sectionCountArray = @[@2, @1, @1]; // 用来存储分区总额的可变数组 NSMutableArray *sectionTotalArray = [NSMutableArray array]; // 用__block变量跟踪当前在金额数组中的遍历位置 __block NSInteger currentIndex = 0; [sectionCountArray enumerateObjectsUsingBlock:^(NSNumber *countNum, NSUInteger idx, BOOL *stop) { NSInteger sectionItemCount = [countNum integerValue]; // 先做个越界判断,避免数组访问错误 if (currentIndex + sectionItemCount > amountArray.count) { *stop = YES; return; } // 计算当前分区的总额 CGFloat sectionTotal = 0.0; for (NSInteger i = 0; i < sectionItemCount; i++) { sectionTotal += [amountArray[currentIndex + i] doubleValue]; } // 将总额加入结果数组 [sectionTotalArray addObject:@(sectionTotal)]; // 更新遍历位置,准备处理下一个分区 currentIndex += sectionItemCount; }]; // 最终sectionTotalArray就是你需要的@[@1050.0, @100.0, @50.0]
代码逻辑解释
- 用
__block修饰的currentIndex变量,用来记录当前已经处理到金额数组的哪个位置——因为block内部需要修改外部变量,所以必须加__block标记。 - 遍历
sectionCountArray的每个元素,每个元素代表对应分区的元素数量。 - 针对每个分区,从
currentIndex开始,累加对应数量的金额值,得到分区总额。 - 将总额存入结果数组后,更新
currentIndex,为下一个分区的计算做准备。 - 加入了越界判断,防止因为两个数组长度不匹配导致的崩溃问题。
如果你用Swift开发,也可以用类似的思路(比如用enumerated()方法),但既然你问到了enumerateObjectsUsingBlock:,上面的Objective-C实现完全能满足你的需求。
内容的提问来源于stack exchange,提问作者brookeemily
相关产品推荐
相关产品推荐

