按日期对过滤后的数据进行排序

Sorting Filtered Data by Date

我有一些按日期显示条目的 swiftUI 逻辑,并且仅在日期发生变化时才显示日期。效果很好,感谢:。我遇到的一个问题是按日期顺序显示条目。例如,假设某人输入了一些他们在 3 周前忘记输入的数据。 (我的逻辑允许输入任何过去的日期。)此逻辑不会将条目放在上周发布的条目之前。

通常我会这样做:

filteredArray = wdArray.sorted { (user1, user2) -> Bool in
            return user1.points > user2.points
        }

or 

filteredArray = wdArray.sorted(by: {[=10=].points < .points})

这是我的 class

的开始
class Withdrawal: ObservableObject {

    @Published var wdArray: [WdModel] {
        didSet {
            // save withdrawal entries
                if let encoded = try? JSONEncoder().encode(wdArray) { // save withdrawal entries
                UserDefaults.standard.set(encoded, forKey: "wdBank")
            }
        }
    }

这是按日期过滤条目的逻辑(不排序)。

// creates a list of unique date entries
    // (goes through all elements, saves them in a set, checks if already in set)
    var uniqueBankDates: [String] {
        var seen: Set<String> = []
        return wdvm.wdArray.filter { seen.insert([=12=].wdDate.formatted(date: .abbreviated, time: .omitted)).inserted }
            .map {[=12=].wdDate.formatted(date: .abbreviated, time: .omitted) }
    }

所以底线是我需要帮助修改 uniqueBankDates 以按日期过滤和排序集合(最早的条目在前)。我将不胜感激任何帮助。谢谢

您不需要“保存”集合中的元素 - 您可以:

  • 通过简单地使用 Set(array) 将数组变成 Set,这将删除重复项
  • 使用 Array(yourSetHere)
  • Set 变回数组
  • 排序
  • 将日期数组转换为字符串数组

uniqueBankDates 应该是这样的(WdModel 应该符合 Hashable):

    var uniqueBankDates: [String] {
        Array(Set(wdvm.wdArray))                // This will remove duplicates, but WdModel needs to be Hashable
            .sorted { [=10=].wdDate < .wdDate }   // Compare dates
            .compactMap {
                [=10=].wdDate.formatted(date: .abbreviated, time: .omitted)    // Return an array of formatted the dates
            }
    }