arrays – 由某个属性组合数组的元素

前端之家收集整理的这篇文章主要介绍了arrays – 由某个属性组合数组的元素前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个带有属性日期的对象数组.

我想要的是创建数组数组,其中每个数组将包含具有相同日期的对象.

我明白,我需要类似.filter来过滤对象,然后使用.map将每个东西添加到数组中.

但是如何告诉.map我希望每个组都有来自过滤对象的单独数组,并且必须将此数组添加到“全局”数组以及如何告诉.filter我想要具有相同日期的对象?

改进oriyentel解决方案以允许对任何事物进行有序分组:
  1. extension Sequence {
  2. func group<GroupingType: Hashable>(by key: (Iterator.Element) -> GroupingType) -> [[Iterator.Element]] {
  3. var groups: [GroupingType: [Iterator.Element]] = [:]
  4. var groupsOrder: [GroupingType] = []
  5. forEach { element in
  6. let key = key(element)
  7. if case nil = groups[key]?.append(element) {
  8. groups[key] = [element]
  9. groupsOrder.append(key)
  10. }
  11. }
  12. return groupsOrder.map { groups[$0]! }
  13. }
  14. }

然后它将适用于任何元组,结构或类以及任何属性

  1. let a = [(grouping: 10,content: "a"),(grouping: 20,content: "b"),(grouping: 10,content: "c")]
  2. print(a.group { $0.grouping })
  3.  
  4. struct GroupInt {
  5. var grouping: Int
  6. var content: String
  7. }
  8. let b = [GroupInt(grouping: 10,GroupInt(grouping: 20,GroupInt(grouping: 10,content: "c")]
  9. print(b.group { $0.grouping })

猜你在找的Swift相关文章