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

SwiftUI中如何提取数组唯一地点并统计各位置扑克对局总盈利

实现方法

你可以通过Swift集合自带的分组、聚合操作实现去重地点+统计总盈利的需求,步骤如下:

  1. 先在你的ViewModel中新增用于展示的地点盈利汇总计算属性,你可以先定义一个轻量的Identifiable结构体用于承载汇总数据,方便ForEach遍历:
// 汇总数据结构,也可以直接用元组,但用Identifiable结构体更适合SwiftUI列表遍历
struct LocationProfit: Identifiable {
    let id = UUID()
    let location: String
    let totalProfit: Int
}

// ViewModel中新增计算属性
var locationProfits: [LocationProfit] {
    // 按location字段分组所有对局
    Dictionary(grouping: sessions, by: \.location)
        // 遍历每个分组,统计该地点总盈利
        .map { location, sessionsInLocation in
            LocationProfit(
                location: location,
                // reduce累加该分组所有对局的profit字段
                totalProfit: sessionsInLocation.reduce(0, { $0 + $1.profit })
            )
        }
        // 可选配置:按总盈利从高到低排序
        .sorted { $0.totalProfit > $1.totalProfit }
}
  1. 替换原有列表的遍历数据源,同时动态渲染总盈利(新增盈利为负时显示红色的优化):
List {
    ForEach(viewModel.locationProfits) { profitItem in
        HStack {
            Text(profitItem.location)
            Spacer()
            Text("$\(profitItem.totalProfit)")
                .bold()
                .foregroundColor(profitItem.totalProfit >= 0 ? .green : .red)
        }
    }
}
.navigationBarTitle(Text("Profit by Location"))

实现原理

  • Dictionary(grouping:by:) 会自动将所有对局按location字段分组,天然保证了地点不会重复
  • reduce 方法会遍历每个地点的所有对局记录,累加profit字段得到该地点的总盈利

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:09:03