我有一个对象数组:
struct Person {
let name: String
let dateOfBirth: Date
let money: Double
}
它包含了人们以及他们收到或花了多少钱。 该数组包含54个这样的对象。 我需要找到具有相同名称和日期字段的所有对象并总结他们的钱。也就是说,最后,我必须在我的阵列中获得少于54条记录。
实施例: 在数组中,对象John有3条记录。例如,首先,他收到15.0美元,然后花了7.0美元,然后收到4.0美元。对于我的任务,我需要在数组中有1条记录而不是3条(有钱作为12.0美元)
有没有人有任何想法?
答案 0 :(得分:2)
你可以循环遍历数组并将它们添加到字典中,其中与出生日期连接的名称将是关键字,并且钱的总和将是值。
假设包含Person
个对象的数组名为people
:
var moneyDictionary = [String:Double]()
for person in people {
let personKey = "\(person.name)\(person.dateOfBirth)"
if let personRecord = moneyDictionary[personKey] {
moneyDictionary[personKey] = personRecord + person.money
} else {
moneyDictionary[personKey] = person.money
}
}
答案 1 :(得分:0)
也许这样的事情会起作用:
struct Person {
let name: String
let dateOfBirth: Date
let money: Double
}
let currentDate = Date()
let person = Person(name: "James", dateOfBirth: currentDate, money: 15)
let person1 = Person(name: "James", dateOfBirth: currentDate, money: -7)
let person2 = Person(name: "James", dateOfBirth: currentDate, money: 4)
// array of person objects
let personArray = [person, person1, person2]
// selected person
let selectedPerson = person
// filter with selected person only
var matchingPersons = personArray.filter {
$0.name == selectedPerson.name && $0.dateOfBirth == selectedPerson.dateOfBirth
}
// extract values
var values = matchingPersons.map { $0.money }
// total
var total = values.reduce(0, +)