在我的tableview中,我从这些数组中显示了我的数据:
var offersProduct = [String]()
var offersPrice = [String]()
var savings = [String]()
var shops = [String]()
var imageNames = [String]()
var exDates = [Int]()
var pickedIDs = [String]()
var setDates = [Int]()
目前数据没有以任何方式排序。所以我有两个问题。
我有exDates数组,witch是timeIntervalSince1970的Int数组。所以我想要最接近的到期日期来获得数组的索引0。
所以,假设我已经对exDates数组进行了排序,这给了我另一个问题,因为现在显示的到期日期与其他数组的数据不匹配。所以我需要以某种方式对其他数组进行排序,方法是将数据从与exDates数组相同的索引中移出。怎么办?
希望有人可以提供帮助。
答案 0 :(得分:3)
您的问题是您使用单独的实体,其中应使用单个/统一实体。要实现您的目标,您应该切换到使用包含所有相关数据的class
或struct
。
如果继续使用当前采用的方法,则可以确保您拥有任意错误并执行无聊操作以在所有阵列之间同步数据。因此,实质上,拥有多个数组而不是一个专门对象数组是不良做法。
考虑重构数组:
struct Entity {
var offerProduct : String
var offerPrice : String
var savings : String
var shop : String
var imageName : String
var exDate : Int
var pickedID : String
var setDate : Int
}
var entities = [Entity]()
然后对单个实体数组进行排序(一旦填充),您只需设置必要的条件,例如:
entities = entities.sorted(by: {$0.exDate > $1.exDate })
答案 1 :(得分:3)
制作一个结构:
struct Entry {
let product: String
let price: String
let saving: String
let shop: String
let imageName: String
let exDate: Int
let pickedID: String
let setDate: Int
}
然后使用这些结构的一个数组而不是几个:
var entries = [Entry]()
您可以通过结构的一个字段轻松地对此数组进行排序:
let expiryTimePoint = ...
entries = entries.sorted({
// compare absolute differences of intervals for sorting
return abs($0.exDate - expiryTimeInterval) > abs($1.exDate - expiryTimeInterval)
})