按日期对过滤后的数据进行排序
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
}
}
我有一些按日期显示条目的 swiftUI 逻辑,并且仅在日期发生变化时才显示日期。效果很好,感谢:
通常我会这样做:
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
}
}