【问题标题】:Swift - Sort array similar to anotherSwift - 排序数组类似于另一个
【发布时间】:2017-11-23 08:14:13
【问题描述】:

在我的表格视图中,我从这些数组中获取数据:

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 的优先。

我有 exDates 数组,witch 是 timeIntervalSince1970 的 Int 数组。所以我想要最近的到期日期来获取数组的索引 0。

  1. 如何像第一个一样对其他数组进行排序?

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

希望有人能提供帮助。

【问题讨论】:

标签: arrays swift sorting


【解决方案1】:

您的问题是您在应该使用单一/统一实体的地方使用单独的实体。要实现您正在尝试的内容,您应该切换到使用 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 })

【讨论】:

  • 几乎同步 :-)
【解决方案2】:

制作结构:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-25
    • 2017-08-20
    • 2021-07-17
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多