首页 > 解决方案 > 数组中的 Swift 分组顺序对象

问题描述

我有以下对象数组:

[Car, Train, Train, Motorbike, Train, Car, Car]

我想将彼此跟随的任何相同类型的对象分组为以下内容:

[Car, [Train, Train], Motorbike, Train, [Car, Car]]

甚至更好:

[Car, GroupOfVehicles(type: .train, vehicles:[Train, Train]), Motorbike, Train, GroupOfVehicles(type: .car, vehicles:[Car, Car])

我发现了一些关于按属性分组的 SO 帖子,但我需要保持数组的顺序性不变。

对于那些对我的目标感兴趣的人:我想在一个表格中显示对象,但如果有一组相似的顺序对象,它们应该全部显示在同一“行”上,因此用户将滚动浏览它们水平。

标签: arraysswiftgroupingswift5

解决方案


下面是一个基于数组的解决方案,Any但如果这些类型都符合一个通用协议或具有一个通用超类,那么这有望以更有效的方式解决。

var grouped: [[Any]] = []
var previous: String = ""
motors.forEach {
    let vehicleType = "\(type(of: $0))"
    if vehicleType != previous {
        grouped.append([$0])
        previous = vehicleType
    } else {
        grouped[grouped.count - 1].append($0)
    }
}

推荐阅读