首页 > 解决方案 > 从 SwiftUI 中的数组中提取唯一项和计算

问题描述

我正在尝试在我的 SwiftUI 应用程序中创建一个 Metrics 视图。我正在构建它,以便我可以跟踪我玩的扑克游戏。每个 Session 模型如下所示:

struct PokerSession: Hashable, Codable, Identifiable {
var id = UUID()
let location: String
let game: String
let stakes: String
let date: Date
let profit: Int
let notes: String
let imageName: String
let startTime: Date
let endTime: Date

在我的指标视图中,我想遍历存储在以下类型数组中的所有会话: [PokerSession] 显示所有唯一位置及其相应利润总额的列表。这就是我的代码现在的样子,显然无法正常工作,因为我得到了重复的位置:

            List {
            ForEach(viewModel.sessions) { location in
                HStack {
                    Text(location.location)
                    Spacer()
                    Text("$500")
                        .bold()
                        .foregroundColor(.green)
                }
            }
            .navigationBarTitle(Text("Profit by Location"))
        }

有谁知道我如何获取独特的位置并计算他们的总利润?非常感谢!

标签: iosswiftswiftui

解决方案


我的解决方案是从您的大多数回复中借用的,感谢您的反馈。下面是工作的最终代码,能够避免创建字典,而是依赖于 map 和 reduce。

                List {
                ForEach(viewModel.uniqueLocations, id: \.self) { location in
                    HStack {
                        Text(location)
                        Spacer()
                        Text("$" + "\(viewModel.sessions.filter({$0.location == location}).reduce(0) { $0 + $1.profit})")
                            .bold()
                            .foregroundColor(.green)
                    }
                }
                .navigationBarTitle(Text("Profit by Location"))
            }

推荐阅读