Arrays 将数组数据合并到唯一值上

Arrays 将数组数据合并到唯一值上,arrays,swift,Arrays,Swift,在Swift中,给定一个包含int和字符串的结构,是否可以基于字符串值对int求和(感觉像一个键,值问题) 鉴于: struct Structure { let number: Int let text: String } var arrayOfStructs: [Structure] = [ Structure(number: 3, text: "foo"), Structure(number: 5, text: "bar"), Structure(n

在Swift中,给定一个包含int和字符串的结构,是否可以基于字符串值对int求和(感觉像一个键,值问题)

鉴于:

struct Structure {
    let number: Int
    let text: String
}

var arrayOfStructs: [Structure] = [
    Structure(number: 3, text: "foo"),
    Structure(number: 5, text: "bar"),
    Structure(number: 7, text: "foo")
    ]

arrayOfStructs.count()==3
输出一个数组,其中元素0和2有效地“求和”,结果是:


arrayOfStructs[0] == Structure(number:10, text: "foo")
arrayOfStructs[1] == Structure(number:5, text: "bar")
arrayOfStructs.count() == 2 


这里有一种方法可以将结构数组简化为一个新数组,其中每个
文本
值出现一次,
数字
值是相应
文本
值的总和

struct Structure{
    let number: Int
    let text: String
}

var arrayOfStructs: [Structure] = [
    Structure(number: 4, text: "A"),
    Structure(number: 2, text: "B"),
    Structure(number: 5, text: "C"),
    Structure(number: 7, text: "A"),
    Structure(number: 3, text: "C"),
    Structure(number: 1, text: "A"),
    Structure(number: 6, text: "C"),
]

let newStructs = arrayOfStructs
                     .reduce(into: [String: Int]()) { $0[$1.text, default: 0] += $1.number }
                     .map { Structure(number: $0.value, text: $0.key) }
print(newStructs)

Swift可以推断字典类型
reduce(to:[:])
结构。init
可以是shorter@LeoDabus很高兴知道。但就我个人而言,从可读性的角度来看,这是一个我宁愿明确的例子。@Shu Khan我只是尝试了我认为你的意思,但它不起作用。我们也可以使用字典初始值设定项
let totals:[String:Int]=.init(arrayOfStructs.map{($0.text,$0.number)),uniquingKeysWith:+)