我需要将数组中的数据排序为 UITableView 部分,日期作为部分标题,任何日期作为今天的日期作为'Today'等



所以我有一个用结构体创建的数据数组,例如:

struct Struct {
  let id = UUID()
  let name: String
  let date: Date
  let amount: Float
}
extension Struct {
  init(name: String, amount: Float) {
    self.name = name
    self.date = Date()
    self.amount = amount
  }
}

然后用于创建结构数组,例如:

var structs = [Struct]()
let name = ["struct1", "struct2", "struct3"]
let amount = [1, 2, 3]
let structsCount = name.count
for i in 0..<structsCount {
  structs.append(Struct(name: name[i], amount: Float(amount[i])))
}

这仅用于虚拟数据,因此我知道日期将始终是当前日期。我看到了使用 date 属性将structs数组排列到字典中,然后按该日期对字典进行排序的建议。我似乎无法让它工作。

任何想法将不胜感激。

我建议你将结构排列成矩阵[[Struct]],这样你就会有下一个数组[[Struct(name: 1, date: 20-10-2019, amount: 1), Struct(name: 2, date: 20-10-2019, amount: 2)], [Struct(name: 3, date: 20-10-2019, amount: 3)], ...]

然后您可以使用它来填充 UITableView .

您可以使用以下代码进行操作

//Since Set contains unique values, you will get all dates
let dates = Set(structs.map { $0.date })
var resultStructs: [[Struct]] = []
for date in dates {
    var array: [Struct] = []
    for element in structs {
        if date == element.date {
            array.append(element)
        }
    }
    resultStructs.append(array)
}

现在resultStructs将包含按日期排列的数组[[Struct]]。对其进行排序以获得正确的顺序并填充UITableView

最新更新