按多个属性快速对数组进行分组

Bab*_*bar 1 arrays dictionary swift

Swift 提供了一种基于单个属性将数组转换为字典的方法。是否可以根据多个属性将数组分组为字典。类似于以下内容

例如,我们有包含姓名、年龄和性别的对象数组

Person{
  let name: String
  let age: Int
  let gender: String
}
Run Code Online (Sandbox Code Playgroud)

我们有包含人员的数组

let array:[Person] = [Person(name: "Alex", age: 25, gender: "Male"), Person(name: "Sara", age: 25, gender: "Female")]
Run Code Online (Sandbox Code Playgroud)

如何按姓名和年龄等多个属性进行分组?

Dictionary(grouping: array, by: { $0.name && $0.age })
Run Code Online (Sandbox Code Playgroud)

Sul*_*han 7

您可以按任何可以成为键的东西进行分组,换句话说,按任何可以成为键的东西进行分组Hashable

如果需要组合多个属性,请定义一个新类型:

struct GroupingKey: Hashable {
   let name: String
   let age: Int
}

Dictionary(grouping: array, by: { GroupingKey(name: $0.name, age: $0.age) })
Run Code Online (Sandbox Code Playgroud)