Arrays 从结构中获取同一标签的值之和
我需要根据此信息将未搜索的添加到数组中。如果有一个重复的,钱将被汇总,然后存入一个。我怎样才能做到这一点?数据可能很多Arrays 从结构中获取同一标签的值之和,arrays,swift,generics,struct,Arrays,Swift,Generics,Struct,我需要根据此信息将未搜索的添加到数组中。如果有一个重复的,钱将被汇总,然后存入一个。我怎样才能做到这一点?数据可能很多 import UIKit struct TestData { let Label : String var Money : Double } var SaveDate = [TestData]() var TestD = [TestData]() SaveDate.append(TestData(Label: "test1", Money: 55)) Sav
import UIKit
struct TestData {
let Label : String
var Money : Double
}
var SaveDate = [TestData]()
var TestD = [TestData]()
SaveDate.append(TestData(Label: "test1", Money: 55))
SaveDate.append(TestData(Label: "test1", Money: 35))
SaveDate.append(TestData(Label: "test2" , Money: 15))
SaveDate.append(TestData(Label: "test1" , Money: 10))
SaveDate.append(TestData(Label: "test3" , Money: 30))
print([{Label "test1", Money 55}, {Label "test1", Money 35}, {Label "test2", Money 15},{Label "test1", Money 10}, {Label "test3", Money 30}])
//Result presentation
//Label1 = test1 , Money = 100
//Label2 = test2 , Money = 15
//Label3 = test3 , Money = 30
这可能有助于:
import UIKit
struct TestData {
let label : String
var money : Double
}
var saveData = [TestData]()
saveData.append(TestData(label: "test1", money: 55))
saveData.append(TestData(label: "test1", money: 35))
saveData.append(TestData(label: "test2" , money: 15))
saveData.append(TestData(label: "test1" , money: 10))
saveData.append(TestData(label: "test3" , money: 30))
let testData = saveData.reduce([TestData](), { currentData, newElement in
var newDataArray = currentData // Swift doesn't allow modifying parameter
if newDataArray.count == 0 {
newDataArray.append(newElement)
} else {
if let sameLabelIndex = newDataArray.firstIndex(where: { $0.label == newElement.label }) {
newDataArray[sameLabelIndex].money += newElement.money
} else {
newDataArray.append(newElement)
}
}
return newDataArray
})
print(testData)
苹果公司关于reduce的文档:你可以使用字典来完成这项工作
import UIKit
struct TestData {
let Label : String
var Money : Double
}
var SaveDate = [TestData]()
SaveDate.append(TestData(Label: "test1", Money: 55))
SaveDate.append(TestData(Label: "test1", Money: 35))
SaveDate.append(TestData(Label: "test2" , Money: 15))
SaveDate.append(TestData(Label: "test1" , Money: 10))
SaveDate.append(TestData(Label: "test3" , Money: 30))
var dictionaryOfValues:[String:Double] = [:]
func addUp() {
for currentItem in SaveDate {
dictionaryOfValues[currentItem.Label] = (dictionaryOfValues[currentItem.Label] == nil ? currentItem.Money : dictionaryOfValues[currentItem.Label] + currentItem.Money)
}
}
addUp()
print(dictionaryOfValues) //["test1": 100.0, "test2": 15.0, "test3": 30.0]
我在一个快速的操场上跑步
字典可以记录你是否遇到标签。我之所以使用dictionaryOfValues[currentItem.Label]=(dictionaryOfValues[currentItem.Label]==nil?currentItem.Money:dictionaryOfValues[currentItem.Label]+currentItem.Money)
是因为它需要1)将当前值添加到字典中,或者2)将当前值附加到字典中已有的值
只要您准备好了,就可以调用
addUp()
,它将为您完成工作。就这么简单
let dict = SaveDate.reduce(into: [String: Double]()) { (result, data) in
result[data.Label, default: 0] += data.Money
}
或者更简单地说
let dict = SaveDate.reduce(into: [String: Double]()) { $0[$1.Label, default: 0] += $1.Money }
口述
//[“test2”:15.0,“test3”:30.0,“test1”:100.0]
注意:对于变量名,您应该按照