Swift - 排序数组类似于另一个

时间:2017-11-23 08:14:14

标签: arrays swift sorting

在我的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]()

目前数据没有以任何方式排序。所以我有两个问题。

  1. 如何在日期之后对数组进行排序?最接近NSDate。
  2. 我有exDates数组,witch是timeIntervalSince1970的Int数组。所以我想要最接近的到期日期来获得数组的索引0。

    1. 如何对第一个数组进行排序?
    2. 所以,假设我已经对exDates数组进行了排序,这给了我另一个问题,因为现在显示的到期日期与其他数组的数据不匹配。所以我需要以某种方式对其他数组进行排序,方法是将数据从与exDates数组相同的索引中移出。怎么办?

      希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:3)

您的问题是您使用单独的实体,其中应使用单个/统一实体。要实现您的目标,您应该切换到使用包含所有相关数据的classstruct。 如果继续使用当前采用的方法,则可以确保您拥有任意错误并执行无聊操作以在所有阵列之间同步数据。因此,实质上,拥有多个数组而不是一个专门对象数组是不良做法

考虑重构数组:

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) 
})