加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:47:31 所属栏目:百科 来源:网络整理
导读:我有一个带有属性日期的对象数组. 我想要的是创建数组数组,其中每个数组将包含具有相同日期的对象. 我明白,我需要类似.filter来过滤对象,然后使用.map将每个东西添加到数组中. 但是如何告诉.map我希望每个组都有来自过滤对象的单独数组,并且必须将此数组添加
我有一个带有属性日期的对象数组.

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

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

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

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

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

let a = [(grouping: 10,content: "a"),(grouping: 20,content: "b"),(grouping: 10,content: "c")]
print(a.group { $0.grouping })

struct GroupInt {
    var grouping: Int
    var content: String
}
let b = [GroupInt(grouping: 10,GroupInt(grouping: 20,GroupInt(grouping: 10,content: "c")]
print(b.group { $0.grouping })

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读