You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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]

代码逻辑解释

  1. 用__block修饰的currentIndex变量,用来记录当前已经处理到金额数组的哪个位置——因为block内部需要修改外部变量,所以必须加__block标记。
  2. 遍历sectionCountArray的每个元素,每个元素代表对应分区的元素数量。
  3. 针对每个分区,从currentIndex开始,累加对应数量的金额值,得到分区总额。
  4. 将总额存入结果数组后,更新currentIndex,为下一个分区的计算做准备。
  5. 加入了越界判断,防止因为两个数组长度不匹配导致的崩溃问题。

如果你用Swift开发,也可以用类似的思路(比如用enumerated()方法),但既然你问到了enumerateObjectsUsingBlock:,上面的Objective-C实现完全能满足你的需求。

内容的提问来源于stack exchange,提问作者brookeemily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:01:42